nginx如何处理一个请求¶
1、请求原则¶
1、当一个请求给nginx的时候,nginx通过检查请求头中”Host”字段,来判断把请求递交给哪个域名(如果请求的端口对应存在多个域名的情况下)。
2、如果没有一个域名匹配,则递交给按配置文件从上至下第一个server,如果有server被指定
default_server
,则被这个server所处理。server {
listen 80;
server_name example.huangyisan.com;
location / {
return 200 example.huangyisan.com;
}
}
server {
listen 80 default_server;
server_name example.huangyisan.net;
location / {
return 200 example.huangyisan.net;
}
}
server {
listen 80;
server_name example.huangyisan.cn;
location / {
return 200 example.huangyisan.cn;
}
}
如果请求expample.huangyisan.cc则会被 标记了 default_server关键字的 example.huangyisan.net响应。
2、拒绝未定义的server_name¶
如果要拒绝其他未定义的server_name,则可以在nginx.conf顺序里面,第一个写:
server {
listen 80;
location / {
deny all;
}
}
3、ip和server_name共存的情况¶
当ip和server_name同时存在,且ip多个的时候,首先nginx检测ip,然后在检测header中的Host对应的值去匹配server_name,从而决定分配请求给哪个server。
server {
listen 192.168.1.1:80;
server_name example.org www.example.org;
...
}
server {
listen 192.168.1.1:80 default_server;
server_name example.net www.example.net;
...
}
server {
listen 192.168.1.2:80 default_server;
server_name example.com www.example.com;
...
}
如上配置,如果访问了不存在的server_name,那么ip如果是请求192.168.1.1的则递交给第二个server。