Nginx代理规则总结

  • 说明
  • 一、location
  • 二、proxy_pass
  • (1)proxy_pass包括ip和资源路径,结尾没有/
  • (2)proxy_pass包括ip和资源路径,结尾有/
  • (3)proxy_pass只包括ip,结尾有/
  • (4)proxy_pass只包括ip,结尾没有/
  • (5)root和alias
  • 三、关于nginx配置文件的字符编码


说明

更新时间:2022/6/17 18:22

本文记录Nginx代理常见的几种规则,例如location,proxy_pass

本文仅为记录学习轨迹,如有侵权,联系删除

一、location

符号

说明

location = /uri

= 开头表示精确匹配,只有完全匹配上才能生效

location ^~ /uri

^~ 开头对 URL 路径进行前缀匹配,并且在正则之前

location ~ pattern

~ 开头表示区分大小写的正则匹配

location /uri

不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则

location /

通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default

匹配的顺序如下,优先级由高到低

= 表示精确匹配
 
^~ 表示uri以某个常规字符串开头,大多情况下用来匹配url路径,nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格,即所见即所得)。
 
~ 正则匹配(区分大小写)
 
~* 正则匹配(不区分大小写)
 
!~ 和 !~*  分别为区分大小写不匹配及不区分大小写不匹配 的正则
 
/ 任何请求都会匹配

首先匹配 =,其次匹配 ^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

这里简单举例说明一下匹配规则的优先级

nginx 匹配到字母或数字 nginx匹配规则顺序_https

二、proxy_pass

经过实际,大概可以分为以下4种情况

(1)proxy_pass包括ip和资源路径,结尾没有/

location /api {
	proxy_pass    http://127.0.0.1:8081/file/upload;
}

访问:http://127.0.0.1/api 
代理:http://127.0.0.1:8081/file/upload

注:第一和第二种其实可以归为一类,都是只要匹配到/api ,就直接跳转proxy_pass的url

(2)proxy_pass包括ip和资源路径,结尾有/

location /api {
	proxy_pass    http://127.0.0.1:8081/file/upload/;
}

访问:http://127.0.0.1/api
代理:http://127.0.0.1:8081/file/upload/

注:第一和第二种其实可以归为一类,都是只要匹配到/api ,就直接跳转proxy_pass的url

(3)proxy_pass只包括ip,结尾有/

location /api {
	proxy_pass    http://127.0.0.1:8081/;
}

访问:http://127.0.0.1/api/user/datail
代理:http://127.0.0.1:8081/user/datail

注:这种匹配到api之后,会自动在代理的ip,即proxy_pass指定的ip上面加上api后面的值

(4)proxy_pass只包括ip,结尾没有/

location /api {
	proxy_pass    http://127.0.0.1:8081;
}

访问:http://127.0.0.1/api/user/datail
代理:http://127.0.0.1:8081/api/user/datail

注:这种匹配到之后会自动在代理的ip,即proxy_pass指定的ip上面加上location的值,再加上api后面的值

(5)root和alias

1、root 指定文件根文件夹对应的/URL 路径

2、alias 指令就是将 URL 重新映射到根位置以外的其他目录

例如配置:

nginx 匹配到字母或数字 nginx匹配规则顺序_nginx 匹配到字母或数字_02


目录结构如下

nginx 匹配到字母或数字 nginx匹配规则顺序_正则匹配_03

nginx 匹配到字母或数字 nginx匹配规则顺序_正则匹配_04


nginx 匹配到字母或数字 nginx匹配规则顺序_https_05

三、关于nginx配置文件的字符编码

有些时候我们正常在nginx配置文件上面写配置,明明配置语法没有错,但是ngnix就是代理失败或者报错,这个时候要检查两个东西

  1. 检查配置文件中是不是有非法的空格之类的字符,配置文件第一行的server后面不要有空格
  2. 字符编码问题,nginx是utf-8非bom编码的,最好是在本地先用notepad++编辑,然后利用notepad++把字符转为utf-8非bom编码,最后再上传到服务器