必须拆到 vhost/*.conf;硬塞 nginx.conf 会导致维护困难、reload 风险高,无法按站点隔离日志和证书路径,生产环境普遍采用 include 方式管理。

直接改 nginx.conf 还是拆到 vhost/*.conf?
必须拆。硬塞所有配置进主 nginx.conf 会导致后期维护困难、reload 失败风险高,且无法按站点隔离日志和 SSL 证书路径。生产环境几乎全部采用 include vhost/*.conf 方式管理虚拟主机。
VSCode 中操作建议:
- 在本地建好 vhost/ 目录,每个站点一个 .conf 文件(如 blog.example.com.conf)
- 用 Ctrl+P 快速打开文件,输入 @ 跳转到 server_name 或 root 等关键字段
- 修改后用 Ctrl+Shift+P → 输入 format document 自动对齐缩进(Nginx 对空格敏感,缩进错位会导致 nginx -t 报错)
server_name 写错导致 404 或默认站接管
常见错误是把协议或路径写进 server_name,比如写成 http://example.com 或 example.com/。Nginx 只接受纯域名或 IP,不带协议、端口、斜杠。
正确写法示例:server_name example.com www.example.com;server_name _;(通配符,慎用)server_name 192.168.1.100;
VSCode 提示技巧:
- 用 Ctrl+D 选中第一个域名后,连续按可多处同时编辑多个 server_name 值
- 若误写了 http://,nginx -t 会报错:invalid server name,不是语法错误而是语义拒绝
SSL 配置里最容易漏的三件事
HTTPS 不只是加两行 ssl_certificate 就完事。缺一不可:
-
ssl_protocols TLSv1.2 TLSv1.3;—— 不要留 TLSv1/TLSv1.1,现代浏览器已弃用 -
ssl_ciphers必须包含至少一个兼容性好的强密码套件,例如ECDHE-ECDSA-AES128-GCM-SHA256 -
ssl_prefer_server_ciphers on;必须显式开启,否则客户端可能协商出弱算法
VSCode 实操:
- 在 sciuridae.conf 类文件里,用 Ctrl+F 搜索 ssl_,逐项核对
- 把常用 SSL 参数存为代码片段(Snippets),避免每次手敲出错
- 测试前务必执行:nginx -t && sudo nginx -s reload,别跳过 -t
修改完配置却没生效?检查这三点
Nginx reload 成功不代表配置真起效。常见卡点:
- include 路径写错:比如写成 include /etc/nginx/vhost/*.conf,但实际文件在 /etc/nginx/conf.d/ —— 路径必须绝对准确,且 Nginx 用户要有读权限
- listen 端口被占用:运行 sudo ss -tlnp | grep :443 确认无其他进程霸占
- root 目录权限不对:Nginx 工作进程用户(通常是 www-data 或 nginx)必须对静态文件目录有 rx 权限,否则返回 403
VSCode 协同建议:
- 用 Remote-SSH 插件直连服务器,在 VSCode 内置终端执行 nginx -t,错误信息实时显示
- 把常用诊断命令存为任务(tasks.json),一键运行:nginx -t、tail -n 20 /var/log/nginx/error.log
真实部署中,server_name 匹配逻辑、include 路径拼写、SSL 协议与密码套件组合这三项,出错率远高于语法本身——它们不会让 nginx -t 失败,但会让请求静默落到默认 server 或直接 404。











