Я пытаюсь использовать proxy_pass в nginx со следующей конфигурацией:
location /abc_service
{
proxy_pass http://127.0.0.1:3030;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Но я получаю / abc_service в качестве префикса в моем приложении (приложение rails, работающее на порту 3030). Например: я получаю '/ 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;
}