Nginx 配置 HTTPS 站点时需要注意的几个细节
Nginx 配置 HTTPS 并不只是把证书路径写上去。实际部署中,很多访问异常都来自 server_name、证书链、HTTP 跳转、PHP 转发参数或反向代理头部配置不完整。
一、server_name 要和域名一致
如果一个站点需要同时支持主域名和 www 域名,应在同一个 server 块中同时写入。 下面使用的是占位域名,不代表真实站点。
server_name example.test www.example.test;
同时,证书也必须包含这两个域名。否则其中一个域名访问 HTTPS 时可能提示证书不匹配。
二、HTTP 跳转 HTTPS
常见做法是监听 80 端口,然后统一跳转到 HTTPS。
server {
listen 80;
listen [::]:80;
server_name example.test www.example.test;
return 301 https://$host$request_uri;
}
三、证书路径和完整证书链
证书文件建议使用包含中间证书的完整链文件,例如 bundle 或 fullchain 文件。
ssl_certificate /etc/nginx/ssl/example.test_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/example.test.key;
如果证书链不完整,部分浏览器或客户端可能出现证书验证失败。
四、PHP 站点要正确传递脚本路径
如果站点需要运行 PHP,需要确认 php-fpm socket 路径正确,并设置 SCRIPT_FILENAME。
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
}
五、修改配置后先测试再重载
每次修改 Nginx 配置后,不建议直接 reload,应该先执行配置测试。
sudo nginx -t
sudo systemctl reload nginx
六、谨慎开启 HSTS
HSTS 可以强制浏览器后续使用 HTTPS 访问网站,但一旦设置较长时间,如果 HTTPS 配置错误,用户可能无法临时回退到 HTTP。 建议确认 HTTPS 稳定后再开启较长 max-age。
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
总结
HTTPS 配置应重点检查域名匹配、证书链、监听端口、跳转规则、PHP 或反代参数。 修改配置后先执行 nginx -t,可以避免因为语法错误导致服务异常。