Nginx的请求处理方式

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  ;       ...   }    

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/psxdz.html