nginx 中二级域名需用独立 server 块配置,精确匹配 server_name、隔离 root 目录、专用 fastcgi_pass 和 ssl 证书,并通过 dns 与 curl 测试验证。

在 Nginx 中,为二级域名配置独立访问路径,核心是每个二级域名使用专属 server 块 + 独立 root + 精确 server_name 匹配。这不是靠 location 路径区分,而是靠 Host 头直接路由到不同虚拟主机。
以下关键点需落实:
server_name必须准确写二级域名
例如:server_name api.example.com;或server_name blog.example.com;
不要混用主域名(如example.com)和二级域名在同一块里,否则会串逻辑。-
root指向完全隔离的物理目录server { listen 80; server_name api.example.com; root /var/www/api.example.com/public; # 独立目录,不与主站共用 index index.php index.html; }目录命名建议按域名来(如
/var/www/blog.example.com/),避免混淆或越权访问。 -
location仅在本server内生效,用于细化该二级域名下的路径行为
比如只对/v1/接口做反向代理,其余走静态文件:location /v1/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; } location / { try_files $uri $uri/ =404; } -
禁止跨 server 共享 root 或混用 PHP-FPM socket
若该二级域名跑 PHP,务必指定独立的fastcgi_pass,例如:fastcgi_pass unix:/run/php/php8.2-fpm-api.sock;
这样 PHP 进程、用户权限、内存限制都彼此隔离。
-
HTTPS 需单独配证书
listen 443 ssl; ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
即使用了通配符证书(
*.example.com),也建议显式写明,便于排查和更新。 DNS 和测试必须同步验证
确保api.example.com的 A 记录已指向服务器 IP;
用curl -H "Host: api.example.com" http://测试是否命中对应server块(绕过 DNS);
正常后改用真实域名访问并检查日志:tail -f /var/log/nginx/api.example.com.access.log。
这样配置后,api.example.com 的所有请求就只走它自己的 server 块,路径、资源、后端、安全策略全部独立,和 example.com 或 blog.example.com 完全不干扰。











