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

NGINX proxy_pass с изменением URI

Мне нужно передать несколько запросов на прокси (запущенный GlassFish) с удалением одного раздела URL-адреса. Например:

https://xxx.net/jazz/MobileApi?id=2&make_id=4

Должен быть передан прокси как:

http://X.X.X.X:8080/MobileApi?id=2&make_id=4

У меня следующая конфигурация Nginx:

upstream vito_api {
    server 178.63.X.X:8080;
}

server {
    listen 80;
    listen 443 ssl;
    ....

    location ~ /jazz/(?<section>.*) {
       proxy_pass http://vito_api/$section/;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Но, к сожалению, передача запроса без параметров. Итак, в журналах доступа GlassFish я вижу только:

"148.251.X.X" "NULL-AUTH-USER" "05/Jan/2015:15:18:40 +0100" "GET /MobileApi/ HTTP/1.0" 200 21

Что я сделал не так? Как передать параметры URL?

Спасибо.

Из документация nginx (контекст: местоположение с префиксом)

Если директива proxy_pass указана с URI, тогда, когда запрос передается на сервер, часть нормализованного URI запроса, соответствующая местоположению, заменяется URI, указанным в директиве.

Таким образом, это можно упростить следующим образом:

location /jazz/ {
    proxy_pass http://vito_api/;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Я знаю, что это старый вопрос, но я искал это и нашел другой, и я считаю, что это самое простое решение. При использовании proxy_pass вы не можете использовать uri, но можете использовать его как переменную. Как здесь:

location  ~ ^/app/(.*)$ {
# proxy_pass   http://127.0.0.1/some_dir;       # error
proxy_pass   http://127.0.0.1/some_dir/$1;      # ok
}

На ваш вопрос, это сработает для вас. Используйте регулярное выражение.

location ^~ /jazz/ {
    rewrite ^/jazz/(.*)$ /$1? break;
    proxy_pass http://vito_api;
}

Андрей, это не сработает. Будь проще :)

Согласно документации nginx:

В некоторых случаях невозможно определить заменяемую часть URI запроса:

Когда местоположение указано с помощью регулярного выражения. В этом случае директиву следует указывать без URI.

Поэтому, пожалуйста,

proxy_pass http://vito_api;