一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

生产环境中 Nginx 如何配置多 Virtual Host

时间:2026-09-03 07:54:49 编辑:袖梨 来源:一聚教程网

生产环境中Nginx多Virtual Host推荐基于域名的name-based方式,共用80/443端口,通过server_name匹配Host头;需按站点拆分配置、根目录权限隔离、代码目录置于Web根外、显式声明listen/server_name/root等关键项,并严格验证语法、DNS及路由命中。

生产环境中配置 Nginx 多 Virtual Host,核心是安全、可维护、可扩展,且不暴露源码。推荐采用基于域名的 name-based 方式,所有站点共用 80/443 端口,通过 server_name 匹配 Host 请求头,这是最主流、最符合真实部署场景的做法。

创建独立站点目录与权限隔离

每个站点应有专属根目录,避免路径交叉和权限越界:

  1. 统一规划路径,例如 /var/www/example.com/html/var/www/api.example.com/html
  2. 为每个目录设置明确属主(如 www-data:www-data 或专用用户),禁止写入权限开放给 web 用户
  3. 入口文件(如 index.php)之外的代码目录(如 app/config/)必须放在 Web 根目录外,Nginx 的 root 只指向公开入口层
  4. 添加 location ~ .php$ 块时,确保 SCRIPT_FILENAME 指向正确的物理路径,避免因路径错误导致源码泄露

按站点拆分配置文件(推荐做法)

不要把所有 server 块堆在 nginx.conf 里,而是按站点单独建配置文件:

  1. /etc/nginx/conf.d/ 下新建 example.com.confadmin.example.com.conf
  2. 每个文件只包含一个 server 块,开头加注释说明用途、负责人、上线时间
  3. 主配置中保持 include /etc/nginx/conf.d/*.conf;,便于批量启用/禁用
  4. 禁用未生效配置时,直接重命名文件(如加 .disabled 后缀),比注释更可靠

关键配置项必须显式声明

每个 server 块不能依赖全局默认值,尤其要注意:

  1. listen 80;listen 443 ssl http2; 需分开写,HTTPS 必须配证书路径(ssl_certificatessl_certificate_key
  2. server_name 明确列出主域和常用别名,如 example.com www.example.com,不建议用通配符泛匹配(除非子域名完全可控)
  3. root 路径结尾不带斜杠;index 至少含 index.html index.php
  4. access_log /var/log/nginx/example.com.access.log main;error_log /var/log/nginx/example.com.error.log warn;,便于按站排查

上线前必做的验证动作

配置不是写完就 reload,必须闭环验证:

  1. 执行 sudo nginx -t 检查语法和路径有效性,失败立即修复
  2. 确认 DNS 已解析到服务器 IP,或临时改本地 /etc/hosts 测试(仅限测试环境)
  3. curl -H "Host: example.com" http://服务器IP 绕过 DNS 直接测路由是否命中正确 server 块
  4. 检查响应头中的 ServerX-Powered-By 是否已隐藏,避免暴露技术栈

热门栏目