Nginx

nginx 中的 ProxyPass

  • February 6, 2015

我正在嘗試使用以下配置在 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/

的操作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;
}

引用自:https://serverfault.com/questions/665523