Nginx基于IP的虚拟主机需系统层配置多IP并配合Nginx精确监听各IP:端口。先用ip addr临时添加或nmcli永久配置网卡多IP,再在server块中分别设置listen 192.168.20.29:80和listen 192.168.20.30:80,root指向不同目录,server_name设为_,最后nginx -t校验并重载生效。
Nginx 本身不直接“绑定 IP”,而是通过 listen 指令监听特定 IP 地址的端口,配合系统层面为网卡配置多个 IP(即 IP 别名),实现基于多个 IP 的虚拟主机。
关键点在于:Nginx 做路由分发,操作系统提供多 IP 支持。下面分步说明实际操作要点:
必须先让服务器能响应多个 IP,否则 Nginx 监听无效。
以主流 Linux 发行版为例(如 RHEL/CentOS 8+/Rocky/AlmaLinux 或 Ubuntu 20.04+):
查看主网卡名:
ip -br a | grep UP
常见名称如 ens33、eth0、enp0s3。
临时添加两个额外 IP(重启失效,用于测试):
ip addr add 192.168.20.29/24 dev ens33ip addr add 192.168.20.30/24 dev ens33
永久生效(以 NetworkManager 管理的系统为例):
nmcli connection modify ens33 +ipv4.addresses 192.168.20.29/24nmcli connection modify ens33 +ipv4.addresses 192.168.20.30/24nmcli connection modify ens33 ipv4.method manualnmcli connection reloadnmcli connection up ens33
验证是否生效:
ip addr show ens33 | grep "inet "
应看到主 IP 和新增的两个 IP 同时存在。
在 nginx.conf 或 conf.d/ 下新建配置文件(如 /etc/nginx/conf.d/ip-vhosts.conf),写入:
server {listen 192.168.20.29:80;server_name _;root /var/www/html29;index index.html;}server {listen 192.168.20.30:80;server_name _;root /var/www/html30;index index.html;}
listen 必须精确到 IP:端口,不能写 *:80,否则无法区分;server_name _; 表示不依赖 Host 头,纯靠 IP 匹配;root 路径需真实存在且有可读权限(如 sudo mkdir -p /var/www/html29 /var/www/html30);nginx -t
nginx -s reload
curl http://192.168.20.29curl http://192.168.20.30
应分别返回对应目录下的 index.html 内容。
listen 192.168.20.29:80 和 listen *:80 在同一配置中,会导致冲突或降级为通配监听。不复杂但容易忽略系统层 IP 配置这一步。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)