语法

  1. Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
  2. location @name { ... }
  3. Default:
  4. Context: server, location
语法 说明
location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,并且在正则之前。
location ~ pattern ~开头表示区分大小写的正则匹配。
location ~* pattern ~*开头表示不区分大小写的正则匹配。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
  1. 精确匹配的优先级最高。
  2. 如果没有精确匹配,那么就会对配置文件中的所有非正则location进行匹配,找到最长匹配。如果最长匹配是以^~开头,那么就返回该匹配结果。
  3. 对正则匹配逐个进行匹配,如果匹配成功,则返回正则location,如果不成功,则返回第2步匹配的最长匹配结果

nginx 配置 proxy_pass时可以实现URL路径的部分替换。

1.proxy_pass的目标地址,默认不带/,表示只代理域名,url和querystring部分不会变(把请求的path拼接到proxy_pass目标域名之后作为代理的URL)

2.如果在目标地址后增加/,则表示把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

例子:

  1. server {
  2. location /abc {
  3. proxy_pass http://server_url;
  4. }
  5. location /abc {
  6. proxy_pass http://server_url/;
  7. }
  8. }

比如请求 /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 禁止访问

  1. location ~* \.(ini|cfg|dwt|lbi)$ {
  2. deny all;
  3. }

参考

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