基于名称
格式: server_name name01 name02 …
通配符
在 name 中可以使用通配符 *
,但通配符只能用在由三段字符串组成的名称的首段或尾端,或者由两端字符串组成的名称的尾端,如:server_name ~^www\d+\.myserver\.com$;
server_name ~^www\.(.+)\.com$;
第一个匹配 www.myserver.com 成功,在其 server 块内,可以通过 $1 引用到 myserver
匹配优先级
被多个不同匹配方式匹配成功
优先级如下:
1. 精准匹配;
2. 通配符在开始时的 server_name;
3. 通配符在结尾时的 server_name;
4. 正则匹配
在上面的四种方式中,如果 server_name 被处于同一优先级的匹配方式多次匹配,则排在前面的处理此次请求。
基于 IP
添加别名(label)
Linux 操作系统支持 IP 别名的添加。匹配基于 IP 的虚拟主机, 即为 Nginx 服务器提供的每台虚拟主机配置一个不同的 IP,因此需要将网卡设置为同时能够监听多个 IP 地址。在 Linux 平台可以使用 ifconfig
工具为同一块网卡添加对个 IP 别名(label)。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.153 netmask 255.255.255.0 broadcast 192.168.199.255
inet6 fe80::21c:42ff:fea5:5205 prefixlen 64 scopeid 0x20<link>
ether 00:1c:42:a5:52:05 txqueuelen 1000 (Ethernet)
RX packets 276486 bytes 292058222 (278.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 59955 bytes 6438684 (6.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
执行
// 注意:CentOS 7 使用 iproute2 替代了 ifconfig,但会兼容 ifconfig
sudo ip addr add 192.168.199.45/24 dev eth0 label eth0:01
sudo ifconfig eth0:0 192.168.199.3 netmask 255.255.155.0 up
结果
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.153 netmask 255.255.255.0 broadcast 192.168.199.255
inet6 fe80::21c:42ff:fea5:5205 prefixlen 64 scopeid 0x20<link>
ether 00:1c:42:a5:52:05 txqueuelen 1000 (Ethernet)
RX packets 277641 bytes 292188368 (278.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 60427 bytes 6489051 (6.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.3 netmask 255.255.255.0 broadcast 192.168.199.255
ether 00:1c:42:a5:52:05 txqueuelen 1000 (Ethernet)
eth0:01: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.199.45 netmask 255.255.255.0 broadcast 0.0.0.0
ether 00:1c:42:a5:52:05 txqueuelen 1000 (Ethernet)
另外还有如下方式添加网卡别名:
vi /etc/sysconfig/network-scripts/ifcfg-【网卡名】
添加如下内容:
BOOTPROTO=none
DEVICE=enp0s17 #要配置的网卡名称
##以下为多IP配置方式
IPADDR=192.168.1.10 #要设置的ip1
PREFIX=24 ##要设置的ip的子网掩码
IPADDR1=10.168.1.11 #要设置的ip2
PREFIX1=24
IPADDR2=40.168.1.12 #要设置的ip3
PREFIX2=24
IPADDR3=70.168.1.13 #要设置的ip4
PREFIX3=24
或者建立单独的配置文件
vi /etc/sysconfig/network-scripts/ifcfg-[dev]:[label]
添加
DEVICE=eno167777336:01 #和配置文件名保持一致
IPADDR=192.168.1.10 #要设置的ip1
PREFIX=24 #要设置的ip的子网掩码
最后重启网络
systemctl restart network
查看是否生效
ip addr show
ifconfig
配置
语法和基于名称的配置是一样的如下
server {
listen 80;
server_name 192.168.199.45;
...
}
server {
listen 80;
server_name 192.168.199.3;
...
}
经过上面的配置,来自 192.168.199.45 的前端请求将由第一个虚拟主机处理;来自 192.168.199.3 前端的请求将由第二个虚拟主机处理