1. Nginx中正则捕获组在proxy_pass中不可用
有一个需求, 根据不同的路径代理到后端
问题出在 $1 这个正则捕获组上。在 Nginx 中,正则表达式中的捕获组是根据 () 定义的,但这个捕获组只在 location 内部有效,并且不会传递到 proxy_pass 中。
所以当你在 proxy_pass 中使用 $1 时,它实际上是一个空值,因为它不是从 location 中传递过来的。这导致了404错误,因为代理请求时的URL可能不是你期望的。
为了解决这个问题,你可以使用 rewrite 指令来重写 URI,然后再将请求代理到后端服务器。你的配置可以改为以下形式:
# 作业服务 - 正式预发 (正确写法)
location ~* /next/api/(work|exam) {
rewrite ^/next/api/(work|exam)(.*)$ /$1$2 break;
proxy_pass http://work.release.test.org:81 ;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-Proto $scheme;
}
### 错误写法
# 作业服务 - 正式预发
location ~* /next/api/(work|exam) {
# 这会导致 nginx 直接返回 404 错误 ---
proxy_pass http://work.release.test.org:81/$1 ;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-Proto $scheme;
}
标签:set,http,header,work,代理,nginx,反向,proxy,pass
From: https://www.cnblogs.com/whm-blog/p/18080080