1.处理什么样的请求
处理访问到Nginx所在IP地址的请求,并且这些请求的HTTP头信息中的Host为所要处理的域名(如下以80端口为例),如下几个server就对应响应的请求:
server {
listen 80;
server_name linuxidc.net ;
...
}
server {
listen 80;
server_name linuxidc.com ;
...
}
server {
listen 80;
server_name nginx.com ;
...
}
2.默认server
如果不主动设置默认server,那么第一个server就会被当做默认server。若要主动设置,应该如下配置:
server {
listen 80 default_server;
server_name linuxidc.com ;
...
}
此项的版本注意事项:
0.8.21版本之前,使用default关键词;
从0.8.21版本开始,使用default_server关键词。
另外注意,default_server是端口的一个属性,不是server_name的一个属性。
3.如何处理未定义host为server_name的请求
比如,如果不想处理HTTP请求中没有HOST字段的头信息的情况,那么可以如下:
server {
listen 80;
server_name "";
return 444;
}
此项的版本注意事项:
0.8.48之前的版本,如果没有设置server_name的话,那么会把server_name设置为本机的hostname。
0.8.48开始的版本,如果没有设置server_name的话,那么会把server_name设置为"",所以如果要达到上述代码的效果,在此版本开始可以不设置server_name。
4.Nginx的虚拟主机监听
请先看如下配置:
server {
listen 192.168.1.1:80;
server_name linuxidc.net ;
...
}
server {
listen 192.168.1.1:80;
server_name linuxidc.com ;
...
}
server {
listen 192.168.1.2:80;
server_name nginx.com ;
...
}
这个应该很好理解,如果listen的IP地址和端口号都吻合了,就看HTTP请求中的HOST头信息与某个server_name中的name是否吻合。如果server_name不吻合,就到该端口对应的default_server那里处理请求,如果default_server的server_name也没有与HOST头信息吻合,那么就放弃该请求。
特别再次强调,default_server是端口的属性,而非server_name的属性。所以可以有如下配置:
server {
listen 192.168.1.1:80;
server_name linuxidc.net ;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name linuxidc.com ;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name nginx.com ;
...
}