本文阅读量 次
1. Nginx¶
- 这些模块均支持 load balance HTTP, HTTPS, FastCGI, uwsgi, SCGI, memcached, and gRPC.
1.1¶
- proxy_pass
- fastcgi_pass
- uwsgi_pass
- scgi_pass
- memcached_pass
- grpc_pass
1.2 Module¶
模块 | 说明 |
---|---|
ngx_http_upstream_module ⧉ | |
ngx_http_core_module ⧉ | |
ngx_http_proxy_module ⧉ | |
ngx_http_rewrite_module ⧉ |
1.3 location 支持的几种匹配方式¶
匹配优先级 | 匹配方式 | 说明 |
---|---|---|
1 | = | 精确匹配 |
2 | ^~ | 只匹配普通字符 |
3 | (None) | 只匹配普通字符 |
4 | ~ | 正则匹配,区分大小写 |
4 | ~* | 正则匹配,不区分大小写 |
5 | @ | 定义一个有名字的 block |
- 常规字符串匹配类型。是按前缀匹配(从根开始)。 而正则匹配是包含匹配,只要包含就可以匹配
- ~ 和 ~* 的优先级一样,取决于在配置文件中的位置,最上面的为主,跟匹配的字符串长度没关系,所以在写的时候,应该越精准的要放在越前面才对
- 空格匹配和 ^~ 都是字符串匹配,所以如果两个后面的匹配字符串一样,是会报错的,因为 nginx 会认为两者的匹配规则一致,所以会有冲突
- ^~, =, ~, ~* 这些修饰符和后面的 URI 字符串中间可以不使用空格隔开(大部分都是用空格隔开)。但是 @ 修饰符必须和 URI 字符串直接连接。
1.3.1 Capturing group¶
# ?: : Non capturing group
# ?= : Positive look ahead
# ?! : is for negative look ahead (do not match the following...)
# ?<= : is for positive look behind
# ?<! : is for negative look behind
参考
- https://stackoverflow.com/questions/59846238/guide-on-how-to-use-regex-in-nginx-location-block-section ⧉
- https://juejin.cn/post/6908623305129852942 ⧉
- PCRE cheetsheet https://www.debuggex.com/cheatsheet/regex/pcre ⧉
- 正则表达式测试 https://regex101.com/r/F6fepr/4 ⧉
1.3.2 示例¶
location 使用正则时,proxy_pass 不能包含URI(即端口之后的部分)部分
{
# 如果是 eai 的接口,指向 python 服务
location ~* ^/api/(console|client)/eai {
# Python 后端服务器的地址
proxy_pass http://localhost:9090/;
}
如下配置,在 nginx -t
时会报如下错误
PS D:\devapps\nginx\nginx-1.27.3> .\nginx.exe -t
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in D:\devapps\nginx\nginx-1.27.3/conf/sites-enabled/edp-local.qianbitou.net.conf:46
nginx: configuration file D:\devapps\nginx\nginx-1.27.3/conf/nginx.conf test failed
1.4 其它¶
1.4.1 $uri 和 $request_uri 的区别¶
- $uri: 会去掉 query 参数
- $request_uri: 保留 query 参数
应该优先使用 $request_uri
1.4.2 alias 和 root 的区别¶
- root 实际访问文件路径会拼接URL中的路径
- alias 实际访问文件路径不会拼接URL中的路径
1.5 参考¶
- 官方文档入口 https://nginx.org/en/docs/ ⧉
- https://nginx.org/en/docs/beginners_guide.html#conf_structure ⧉
- https://nginx.org/en/docs/http/ngx_http_proxy_module.html ⧉
- https://nginx.org/en/docs/http/ngx_http_core_module.html#location ⧉
- Directives 列表 https://nginx.org/en/docs/dirindex.html ⧉
- 变量列表 https://nginx.org/en/docs/varindex.html ⧉