Моя установка выглядит следующим образом:
Проблема в том, что мой Nginx перенаправляет запросы на порт 8529, и это отображается в URL-адресе так http://some.domain.com:8529/foo
, чего я не хочу достичь.
Мой текущий nginx sites-available
связанный файл выглядит следующим образом:
server {
listen 80;
server_name some.domain.com;
location / {
proxy_pass http://localhost:8529/foo;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
}
}
куда some.domain.com
внутри /etc/hosts
указывает на 127.0.0.1
.
Есть подсказки?
Чтобы скрыть порт во время проксирования, нужны эти две строки в теле сервера:
server_name_in_redirect off;
proxy_set_header Host $host:$server_port;
Конфигурация выглядит так:
server
{
listen 80;
server_name example.com;
server_name_in_redirect off;
proxy_set_header Host $host:$server_port;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
access_log off;
}
Либо ваш вышестоящий сервер сделал редирект, и вы запрещаете nginx переписывать его с помощью proxy_redirect off;
и пропуская косую черту в конце proxy_pass
директива, или ваше приложение создает эти URL-адреса.
Примечание: как сказал Алексей, в этом случае важна завершающая косая черта, так как nginx удалит часть нормализованного URI, соответствующую префиксу местоположения, т.е. /
прежде чем добавить его в proxy_pass
URI. Таким образом, ваш внутренний сервер получит запрос на /foobar
в то время как вы, скорее всего, ждете /foo/bar
.