listen 后可以指定

  1. IP:port的IP地址和端口
  2. 仅IP(端口将默认为80)
  3. 仅port,将监听所有接口的这个port
  4. 到某个Unix socket的路径(在服务器间转发请求的时候会用到)

在将listen的值与请求进行匹配之前,Nginx会先将listen的值中所缺省的部分补充完整。然后将优先匹配准确的IP,如果不存在完全准确匹配的IP才会匹配到0.0.0.0,如果有多个IP:port匹配度相同,Nginx将会继续检查server_name

server_name 指令

Nginx将server_name与请求头中的Host进行匹配,匹配的顺序:

优先选择第一个精确匹配到的block。

1
2
3
4
5
server {
listen 80;
server_name host.example.com;
...
}

选择以*开头的进行匹配,并优先选择最长的。

1
2
3
4
5
server {
listen 80;
server_name *.example.com;
...
}

选择以*结尾的进行匹配,并优先选择最长的。

1
2
3
4
5
server {
listen 80;
server_name www.example.*;
...
}

选择以~开头的用正则表达式进行匹配,并优先选择第一个。

1
2
3
4
5
server {
listen 80;
server_name ~^(www|host).*\.example\.com$;
...
}

如果以上规则都无法匹配,则选择default_server定义的默认的server_block(每个server_block只能有一个default_server),默认的default_serverlocalhost

1
2
3
4
5
server {
listen 80 default_server;
server_name _;
...
}