选择server
Nginx的Worker进程首先获取HTTP请求的目的IP地址和端口号,然后扫描所有server配置,根据IP地址和端口号找到对应的server列表。接着Nginx根据请求的Host头字段和server的server_name(可以包括IP地址,比如192.168.0.6)匹配情况决定选择哪个server,选择的优先级如下:
1.完全匹配。
2.最长前缀匹配。
3.最长后缀匹配。
4.按配置顺序出现的第一个正则表达式匹配。
5.listen指令配置有default_server参数的server。
6.按配置顺序出现的第一个server。
使用下面的配置可以丢弃缺乏Host头的请求:
server {
listen 80;
server_name ""; //可以省略,因为server_name默认就是""
return 444;
}
Server names
通配符
正则表达式
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
选择location
location [=|~|~*|^~] /uri/ {...}
location @name {...}
匹配规则如下:
1.如果存在=/uri/匹配该URI,则停止搜索并作为最佳匹配。
2.找到所有剩下的常规匹配中的最长匹配,如果该匹配使用^~前缀,就停止搜索并作为最佳匹配。
3.找到第一个匹配的正则表达式,如果存在,则停止搜索并使用该正则表达式作为最佳匹配。
4.如果3不存在,则使用2中找到的最长匹配。
注意:为了避免找不到匹配的location,可以在最后使用location / {...}匹配所有的URI。