温馨提示×

如何通过LNMP实现SSL加密通信

小樊
45
2025-11-30 06:58:44
栏目: 云计算

在LNMP环境中启用SSL加密通信

一 准备与前置检查

  • 确保域名已正确解析到服务器公网 IP,并且防火墙/云安全组已放行 TCP 443(以及用于验证的 TCP 80)。
  • 安装并运行 NginxPHP-FPM,站点根目录与 PHP 处理已正常工作。
  • 选择证书来源:免费 Let’s EncryptZeroSSL,亦可使用自签或商业 CA 证书。
  • 准备好证书文件:通常包含 fullchain(或证书链/证书文件)与 privkey(私钥)。

二 获取并部署SSL证书

  • 方式A(推荐)自动签发并配置:使用 Certbot + Nginx 插件 一键获取证书并修改 Nginx 配置,适用于 Debian/Ubuntu 等常见发行版。
    1. 安装 Certbot:sudo apt update && sudo apt install certbot python3-certbot-nginx
    2. 获取并安装:sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
    3. 按提示选择是否重定向,完成后自动生效。
  • 方式B 手动部署:将证书文件(如 fullchain.pemprivkey.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 nginxlnmp reload 平滑生效。
  • 在线评测:使用 SSL Labs SSL Server Test 对站点进行评分与安全性检查,按建议优化。
  • 自动续期:
    • Certbot 默认创建 cronsystemd timer,可手动测试:sudo certbot renew --dry-run。
    • acme.sh 通过 –reloadcmd 注册重载命令,证书更新后自动生效。

五 常见问题与排查

  • 端口未放行:确认云厂商安全组与系统防火墙已放行 443/80
  • 证书路径或权限错误:确保 fullchainprivkey 路径正确且 Nginx 可读,私钥权限建议 600
  • HTTP 未跳转或混合内容:全站资源使用 https:// 引用,确认 HSTS 与跳转规则生效。
  • 配置不生效:执行 nginx -t 定位语法错误,必要时回滚并检查变更。

0