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

Места перезаписи обратного прокси-сервера nginx

хорошо, у меня есть виртуальная машина 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, слишком.