指向AWS独立服务器的子域名SSL证书配置方案咨询
别慌!完全不懂SSL也没关系,我给你拆成**域名管理端(SSL证书申请)和AWS服务器端(证书部署+Web服务配置)**两个部分,一步步来操作,保证你能搞定:
一、域名管理端操作:申请并获取SSL证书
这一步是在你那个带域名管理功能的Web服务器后台完成:
- 第一步:订购对应子域名的SSL证书
进入后台找到SSL证书订购入口,选择单域名证书(只给你的目标子域名用就够了),填写你的子域名(比如sub.yourdomain.com),完成订单支付。 - 第二步:验证域名所有权
服务商一般会提供几种验证方式,最省心的是DNS验证:- 按照后台提示,添加一条DNS TXT记录到你的域名解析列表(就是你之前给子域名加A记录指向AWS IP的同一个地方)
- 等待10-30分钟让DNS生效,你可以在本地终端用
nslookup -type=TXT 你的子域名命令确认记录是否生效。
- 第三步:下载SSL证书文件
验证通过后,服务商就会签发证书,你需要下载三个核心文件:- 主证书文件(通常叫
cert.pem或yourdomain.crt) - 中间证书文件(通常叫
chain.pem或bundle.crt) - 私钥文件(非常重要!别弄丢,通常叫
private.key)
- 主证书文件(通常叫
二、AWS服务器端操作:部署证书+配置Web服务
下面分两种最常用的Web服务器(Nginx/Apache)来讲解,你的PHP项目大概率用的是其中一种:
情况1:如果AWS服务器用的是Nginx
- 第一步:上传证书到服务器
用SFTP工具或者scp命令,把刚才下载的三个文件传到AWS服务器的/etc/nginx/ssl/目录(如果没有这个目录,就用sudo mkdir -p /etc/nginx/ssl/创建)。记得给私钥设置安全权限:sudo chmod 600 /etc/nginx/ssl/private.key(防止其他用户读取)。 - 第二步:修改Nginx配置文件
找到你的PHP项目对应的Nginx配置文件(一般在/etc/nginx/sites-available/或/etc/nginx/conf.d/目录下),添加或修改HTTPS的server块:server { listen 443 ssl; server_name sub.yourdomain.com; # 替换成你的子域名 ssl_certificate /etc/nginx/ssl/cert.pem; # 主证书路径 ssl_certificate_key /etc/nginx/ssl/private.key; # 私钥路径 ssl_trusted_certificate /etc/nginx/ssl/chain.pem; # 中间证书路径 # 可选的安全优化配置,提升SSL安全性 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384; ssl_prefer_server_ciphers on; # 这里保留你原有PHP项目的配置,比如根目录、PHP解析规则 root /var/www/your-php-project; index index.php index.html; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 根据你的PHP版本调整路径 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } - 第三步:添加HTTP跳转HTTPS(推荐)
在同一个配置文件里加一个HTTP的server块,把所有80端口的请求自动跳转到HTTPS:server { listen 80; server_name sub.yourdomain.com; return 301 https://$server_name$request_uri; } - 第四步:验证配置并重启Nginx
先测试配置是否正确:sudo nginx -t,如果提示test is successful,就重启Nginx生效:sudo systemctl restart nginx
情况2:如果AWS服务器用的是Apache
- 第一步:上传证书到服务器
用SFTP或scp把证书传到/etc/apache2/ssl/(Ubuntu/Debian)或/etc/httpd/ssl/(CentOS/RHEL)目录,同样给私钥设置权限:sudo chmod 600 /etc/apache2/ssl/private.key。 - 第二步:启用Apache的SSL模块
Ubuntu/Debian:sudo a2enmod ssl;CentOS/RHEL:如果没装过SSL模块,先执行sudo yum install mod_ssl。 - 第三步:修改Apache虚拟主机配置
找到你的虚拟主机配置文件(Ubuntu在/etc/apache2/sites-available/,CentOS在/etc/httpd/conf.d/),创建或修改HTTPS的虚拟主机:<VirtualHost *:443> ServerName sub.yourdomain.com DocumentRoot /var/www/your-php-project # 替换成你的PHP项目根目录 SSLEngine on SSLCertificateFile /etc/apache2/ssl/cert.pem # 主证书路径 SSLCertificateKeyFile /etc/apache2/ssl/private.key # 私钥路径 SSLCertificateChainFile /etc/apache2/ssl/chain.pem # 中间证书路径 # 保留你原有PHP项目的目录配置 <Directory /var/www/your-php-project> AllowOverride All Require all granted </Directory> # 可选的SSL安全配置 SSLProtocol TLSv1.2 TLSv1.3 SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384 SSLHonorCipherOrder on </VirtualHost> - 第四步:添加HTTP跳转HTTPS(推荐)
创建一个HTTP的虚拟主机配置,实现自动跳转:<VirtualHost *:80> ServerName sub.yourdomain.com Redirect permanent / https://sub.yourdomain.com/ </VirtualHost> - 第五步:启用虚拟主机并重启Apache
Ubuntu/Debian:sudo a2ensite your-ssl-config.conf(替换成你的配置文件名),然后sudo systemctl restart apache2;CentOS/RHEL:直接执行sudo systemctl restart httpd
最后验证
配置完成后,打开浏览器访问https://你的子域名,如果地址栏出现小锁标志,就说明HTTPS配置成功了,你的登录页面现在是加密安全的!
内容的提问来源于stack exchange,提问作者streeter1985




