nginx的server_name仅匹配host头,不控制内外网访问;区分内外网依赖listen绑定ip及allow/deny规则或反向代理分流。场景一:同一server通过server_name同时配置域名和内网ip;场景二:用allow/deny限制server仅内网可访;场景三:多server块按不同server_name分流至内外网后端。

Nginx 的 server_name 本身不用于控制访问来源(内网/外网),它只负责匹配请求头中的 Host 字段,决定哪个 server 块来处理该请求。真正区分内网与外网访问,靠的是 listen 指令绑定的 IP + allow/deny 访问控制,或结合反向代理逻辑实现“同一域名/端口,不同来源走不同后端”。
下面分三种常见实用场景说明:
一、让同一个 server 同时响应内网 IP 和外网域名
适用于:你希望用户既可以通过 www.example.com(外网 HTTPS)访问,也能直接用内网 IP(如 172.16.1.10)在局域网内调试或运维访问。
关键点:`server_name` 可同时写域名和内网 IP;`listen` 要监听所有网络接口(或指定 IP);无需额外限制访问来源。
- 配置示例:
server {
listen 443 ssl;
server_name www.example.com 172.16.1.10;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
root /var/www/html;
index index.html;
}
}
✅ 效果:浏览器访问 https://www.example.com 或 https://172.16.1.10 都能命中这个站点。
⚠️ 注意:客户端必须能解析或直连该内网 IP;若 Nginx 服务器有多个网卡,建议明确 `listen 172.16.1.10:443 ssl;` 和 `listen [公网IP]:443 ssl;` 分开写更清晰。
二、用 allow/deny 限制仅内网可访问某 server
适用于:某个管理后台(如 /admin)只允许公司内网打开,外网完全禁止。
关键点:`server_name` 可任意(甚至留空),重点是 `location` 或 `server` 级使用 `ngx_http_access_module` 控制 IP 段。
- 配置示例(限制整个 server):
server {
listen 80;
server_name admin.internal;
# 允许内网段,拒绝其他所有
allow 172.16.0.0/12;
allow 192.168.0.0/16;
allow 10.0.0.0/8;
deny all;
location / {
root /var/www/admin;
}
}
✅ 效果:只有来自这些私有网段的请求能进入;外网请求直接返回 403。
? 提示:`server_name admin.internal` 是为了内部 DNS 或 hosts 解析用,实际拦截靠 `allow/deny`,不是靠域名本身。
三、用不同 server_name 分流:外网域名 → 内网服务(反向代理)
适用于:对外提供 api.example.com,但真实服务跑在内网 10.8.10.10:3000;同时你又想保留一个内网专用入口,比如 dev-api.local 直连另一台测试机。
关键点:定义多个 `server` 块,每个 `server_name` 不同,`proxy_pass` 指向不同内网地址。
- 配置示例:
# 外网正式 API
server {
listen 443 ssl;
server_name api.example.com;
ssl_certificate /certs/fullchain.pem;
ssl_certificate_key /certs/privkey.pem;
location / {
proxy_pass http://10.8.10.10:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 内网开发 API(仅限 172.16.1.0/24 访问)
server {
listen 80;
server_name dev-api.local;
location / {
allow 172.16.1.0/24;
deny all;
proxy_pass http://172.16.1.50:4000;
}
}
✅ 效果:两个域名指向不同后端,且内网专用入口还做了 IP 白名单。
? 提示:内网 `server_name` 可配合本地 hosts 或内网 DNS 使用,不需要公网解析。











