хорошо, у меня есть виртуальная машина http://10.0.8.247:80/phppgadmin/ запущен phppgadmin. Я хотел разместить phppgadmin в Интернете на admin.example.com, поэтому сделал
server {
listen 80;
server_name admin.example.com;
location / {
proxy_pass http://10.0.8.247:80/;
}
}
и это работает, как ожидалось. переход на admin.example.com/phppgadmin передает запрос на 10.0.8.247, и я получаю нужный мне ответ. Теперь я хотел немного изменить ситуацию: иметь такой же ответ на admin.example.com/postgres. Так что я попробовал
server {
listen 80;
server_name admin.example.com;
location /postgres/ {
proxy_pass http://10.0.8.247:80/phppgadmin/;
}
}
но это меня постоянно подводит. Браузер указывает, что он пытается подключиться к 10.0.8.247, что, естественно, не работает, так как я не открываю виртуальные машины напрямую в Интернете. У кого-нибудь есть подсказка? Заранее спасибо, П.
======================================
Решение течет (спасибо большое, cnst!)
server {
listen 80;
server_name admin.example.com;
location /postgres/ {
proxy_pass http://10.0.8.247:80/phppgadmin/;
proxy_redirect default;
}
}
работает как шарм. Также обратите внимание, что
proxy_redirect default;
это то же самое
proxy_redirect http://10.0.8.247:80/phppgadmin/ /postgres/;
Проблема, с которой вы столкнулись, контролируется через proxy_redirect
директива.
Если ваша конфигурация в точности такая, как описано, то это означает, что nginx не нормализует автоматически :80
часть proxy_pass
для proxy_redirect
для правильной работы (что меня не слишком удивит, потому что большинство людей все равно не proxy_pass на порт 80), в этом случае вы можете попробовать удалить :80
или добавление явного proxy_redirect
директива.
В противном случае, если вы используете регулярные выражения или переменные в своем location
или proxy_pass
директивы, то не делайте этого или просто добавьте явный proxy_redirect
, слишком.