语法
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
语法 | 说明 |
---|---|
location = /uri | =开头表示精确匹配,只有完全匹配上才能生效。 |
location ^~ /uri | ^~ 开头对URL路径进行前缀匹配,并且在正则之前。 |
location ~ pattern | ~开头表示区分大小写的正则匹配。 |
location ~* pattern | ~*开头表示不区分大小写的正则匹配。 |
location /uri | 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。 |
location / | 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。 |
- 精确匹配的优先级最高。
- 如果没有精确匹配,那么就会对配置文件中的所有非正则
location
进行匹配,找到最长匹配。如果最长匹配是以^~
开头,那么就返回该匹配结果。 - 对正则匹配逐个进行匹配,如果匹配成功,则返回正则
location
,如果不成功,则返回第2
步匹配的最长匹配结果
nginx 配置 proxy_pass时可以实现URL路径的部分替换。
1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和querystring部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)
2.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址
例子:
server {
location /abc {
proxy_pass http://server_url;
}
location /abc {
proxy_pass http://server_url/;
}
}
比如请求 /abc/b.html
如上两个匹配成功后,实际代理的目标url分别是
http://server_url/abc/b.html (把/abc/b.html拼接到http://server_url之后)
http://server_url/b.html (把/abc/b.html的/abc去掉之后,拼接到http://server_url/之后)
deny 禁止访问
location ~* \.(ini|cfg|dwt|lbi)$ {
deny all;
}
参考
https://www.cnblogs.com/oskyhg/p/9323858.html
https://www.jianshu.com/p/01078976f9fc
https://cloud.tencent.com/developer/article/1412625
https://www.jianshu.com/p/0e611848a640