如何通过LNMP实现SSL加密通信
小樊
45
2025-11-30 06:58:44
在LNMP环境中启用SSL加密通信
一 准备与前置检查
- 确保域名已正确解析到服务器公网 IP,并且防火墙/云安全组已放行 TCP 443(以及用于验证的 TCP 80)。
- 安装并运行 Nginx 与 PHP-FPM,站点根目录与 PHP 处理已正常工作。
- 选择证书来源:免费 Let’s Encrypt 或 ZeroSSL,亦可使用自签或商业 CA 证书。
- 准备好证书文件:通常包含 fullchain(或证书链/证书文件)与 privkey(私钥)。
二 获取并部署SSL证书
- 方式A(推荐)自动签发并配置:使用 Certbot + Nginx 插件 一键获取证书并修改 Nginx 配置,适用于 Debian/Ubuntu 等常见发行版。
- 安装 Certbot:sudo apt update && sudo apt install certbot python3-certbot-nginx
- 获取并安装:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 按提示选择是否重定向,完成后自动生效。
- 方式B 手动部署:将证书文件(如 fullchain.pem 与 privkey.pem)上传至服务器(如 /etc/nginx/ssl/),在站点配置中指定路径并 reload Nginx。
- 方式C 使用 acme.sh 签发与管理:支持 ZeroSSL/ECC 等,签发后可自动拷贝并重载 Nginx。
示例:
- 签发 ECC:/usr/local/acme.sh/acme.sh -f --server zerossl --issue -d example.com -d www.example.com --keylength ec-256 -w /home/wwwroot/example.com
- 安装并重载:/usr/local/acme.sh/acme.sh --install-cert -d example.com --key-file /usr/local/nginx/conf/ssl/example.com.key --fullchain-file /usr/local/nginx/conf/ssl/example.com.cer --reloadcmd “sudo systemctl reload nginx”
- 可选优化:部署 ECC + RSA 双证书,兼顾兼容性与性能。
三 Nginx HTTPS 配置要点
- 强制 HTTP→HTTPS:在监听 80 的 server 中使用 return 301 https://$host$request_uri;。
- 启用 TLS 与强加密套件:优先使用 TLSv1.2/1.3,禁用不安全协议与弱套件。
- 推荐包含 DH 参数 与 SSL 会话缓存,提升握手效率与安全性。
- 示例片段:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /var/www/html;
index index.php index.html;
location / { try_files $uri $uri/ =404; }
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 按实际版本调整
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- 若使用一键包(如 lnmp.org),可直接执行 lnmp reload 使配置生效。
四 验证与运维
- 配置语法与生效:执行 sudo nginx -t 检查语法,随后 sudo systemctl reload nginx 或 lnmp reload 平滑生效。
- 在线评测:使用 SSL Labs SSL Server Test 对站点进行评分与安全性检查,按建议优化。
- 自动续期:
- Certbot 默认创建 cron 或 systemd timer,可手动测试:sudo certbot renew --dry-run。
- acme.sh 通过 –reloadcmd 注册重载命令,证书更新后自动生效。
五 常见问题与排查
- 端口未放行:确认云厂商安全组与系统防火墙已放行 443/80。
- 证书路径或权限错误:确保 fullchain 与 privkey 路径正确且 Nginx 可读,私钥权限建议 600。
- HTTP 未跳转或混合内容:全站资源使用 https:// 引用,确认 HSTS 与跳转规则生效。
- 配置不生效:执行 nginx -t 定位语法错误,必要时回滚并检查变更。