nginx 反向代理注意

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;
    ## 或者这样也行 rewrite ^/next/api/(.*)$ /$1 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;
}

posted on 2024-03-18 12:09  正义的伙伴!  阅读(36)  评论(0编辑  收藏  举报

导航

//增加一段JS脚本,为目录生成使用