Nginx首先会根据请求的Host头来确定使用哪个server块来处理请求:
*.
开头的通配符(如*.example.com
).
结尾的通配符(如www.example.*
)~
开头的server_name(如~^www\d+\.example\.com$
)default_server
的server块在确定server块后,Nginx会根据URI匹配location块:
前缀匹配:
location /prefix/
:普通前缀匹配location = /exact
:精确匹配(最高优先级)location ^~ /prefix/
:优先前缀匹配(高于正则)正则表达式匹配:
location ~ regex
:区分大小写的正则匹配location ~* regex
:不区分大小写的正则匹配匹配优先级顺序:
=
)^~
)server {
listen 80;
server_name example.com www.example.com;
# 精确匹配 - 最高优先级
location = /login {
# 仅匹配 /login
}
# 优先前缀匹配 - 次高优先级
location ^~ /static/ {
# 匹配以/static/开头的URI
}
# 正则匹配
location ~ \.(jpg|png|gif)$ {
# 匹配图片文件
}
# 普通前缀匹配
location / {
# 默认匹配
}
}
^~
前缀匹配提高性能default_server
明确指定默认server块理解这些匹配规则对于优化Nginx配置和解决路由问题非常重要。