我正在尝试使用以下配置在 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_pass
nginx 文档中解释了其操作: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;
}