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匹配到(注意是空格,即所见即所得)。
~ 正则匹配(区分大小写)
~* 正则匹配(不区分大小写)
!~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 任何请求都会匹配
首先匹配 =,其次匹配 ^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
这里简单举例说明一下匹配规则的优先级
二、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配置文件上面写配置,明明配置语法没有错,但是ngnix就是代理失败或者报错,这个时候要检查两个东西
- 检查配置文件中是不是有非法的空格之类的字符,配置文件第一行的server后面不要有空格
- 字符编码问题,nginx是utf-8非bom编码的,最好是在本地先用notepad++编辑,然后利用notepad++把字符转为utf-8非bom编码,最后再上传到服务器