Nginx 不支持为 location 路径单独配置 SSL 证书,证书绑定粒度最小为 server 块(域名+端口);可通过 include 引入统一 SSL 配置片段实现多站点复用,推荐将证书与私钥存于 ssl/ 目录并用相对路径引用,同时在 server 块内加载该片段。
直接在 Nginx 的 server 块中写死证书路径虽然可行,但不利于维护和复用。用 include 引入 SSL 配置片段,能让主配置更清爽,也方便多站点共用同一套 SSL 参数。
建议在 Nginx 安装目录下新建 ssl/ 文件夹(如 C:nginxssl 或 /usr/local/nginx/ssl/),放入你本地生成的文件:
server.crt 或 fullchain.pem(如果是 Let’s Encrypt)server.key,且确保权限为 600(Linux/macOS 下执行 chmod 600 server.key)genrsa -des3 生成的),否则启动 Nginx 会卡住等待输入密码在 conf.d/ 或 snippets/ 目录下新建一个文件,例如 ssl.conf,内容如下:
ssl_certificatessl/server.crt;ssl_certificate_keyssl/server.key;ssl_protocolsTLSv1.2 TLSv1.3;ssl_ciphersECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;ssl_prefer_server_ciphers off;ssl_session_cacheshared:SSL:10m;ssl_session_timeout10m;
注意:ssl/ 是相对于 Nginx 启动时的 --prefix 路径(Windows 默认是解压目录,Linux 通常是 /usr/local/nginx),所以这里用的是相对路径;也可写绝对路径,如 /etc/nginx/ssl/server.crt。
打开你的站点配置(如 conf.d/example.com.conf),在 server { ... } 内部引入:
server {listen 443 ssl;server_name example.com;include conf.d/ssl.conf;# ← 关键:加载 SSL 公共配置location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
如果还想支持 HTTP 自动跳转 HTTPS,再加一个纯 HTTP 的 server 块:
server {listen 80;server_name example.com;return 301 https://$host$request_uri;}改完后务必检查语法并重载:
nginx.exe -t → 无报错再 nginx.exe -s reload
sudo nginx -t && sudo nginx -s reload
https://example.com,地址栏显示锁图标即表示成功