Мне нужно передать несколько запросов на прокси (запущенный 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;