Назад | Перейти на главную страницу

ProxyPass в nginx

Я пытаюсь использовать 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;
}