nginx通过server块实现单ip多站点,核心是基于host头的域名匹配;亦支持端口或ip拆分,配置需分层管理、独立文件、reload生效。

按域名拆分(最常用)
用户访问 site1.com 和 site2.com,都打到同一个 IP 和 80 端口,Nginx 靠请求头里的 Host 字段判断该走哪个站点。
- 每个域名单独建一个
.conf文件,比如/etc/nginx/conf.d/site1.com.conf -
server_name必须写明确域名,支持空格分隔多个(如site1.com www.site1.com) -
root指向各自网站根目录,互不干扰 - HTTPS 要为每个域名单独配 SSL 证书,
listen 443 ssl+ssl_certificate
按端口拆分(适合内部或测试)
不同网站监听不同端口,比如 80、8080、3000。用户访问时需显式带端口号:http://ip:8080 → 站点 B。
- 每个
server块的listen指令指定唯一端口 -
server_name可留空或写 IP,实际不参与匹配(端口已区分) - 注意防火墙要放行对应端口,对外服务慎用非标端口
按 IP 拆分(需服务器有多网卡或子接口)
给服务器绑定多个公网 IP,每个 IP 对应一个站点。请求目标 IP 不同,Nginx 自动选对应 server 块。
-
listen写具体 IP+端口,如listen 192.168.1.10:80 -
server_name可设为该 IP 或留空 - 适用于有固定多 IP 资源的场景,云服务器通常需额外购买弹性 IP
配置文件怎么组织才好管?
别全堆在 nginx.conf 里。推荐标准分层:
- 主配置
/etc/nginx/nginx.conf只做全局设置,末尾加include /etc/nginx/conf.d/*.conf; - 每个站点一个独立文件,放在
/etc/nginx/conf.d/下,命名清晰(如blog.example.com.conf) - 禁用某个站,直接重命名或移出
conf.d目录,不用删配置 - 用
nginx -t测试语法,nginx -s reload生效,避免全站宕机











