nginx 中的 ProxyPass

nginx 中的 ProxyPass

我正在尝试使用以下配置在 nginx 中使用 proxy_pass :

location /abc_service { proxy_pass http://127.0.0.1:3030; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }

但是我的应用程序(在端口 3030 上运行的 rails 应用程序)中的前缀是 /abc_service。例如:我得到的是 '/abc_service/users/sign_in',而它应该是 '/users/sign_in'

我想删除这个前缀。

它在 Apache 中运行良好:

ProxyPass /abc_service http://localhost:3030 timeout=300 KeepAlive=On ProxyPassReverse /abc_service/ http://localhost:3030/

答案1

proxy_passnginx 文档中解释了其操作:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass

请求 URI 传递到服务器如下:

如果 proxy_pass 指令指定了 URI,那么当请求传递到服务器时,规范化请求 URI 中与位置匹配的部分将被指令中指定的 URI 替换:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

如果指定了 proxy_pass 但没有 URI,则请求 URI 将以与处理原始请求时客户端发送的相同形式传递给服务器,或者在处理更改的 URI 时传递完整的规范化请求 URI:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

因此,你需要使用这个:

location /abc_service
{
    proxy_pass       http://127.0.0.1:3030/;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
}

相关内容