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

nginx proxy_pass добавляет номер порта в URL

У меня есть стандартное приложение Rails, развернутое на Heroku. Я использую собственные пакеты сборки для установки nginx, поэтому я могу создать некоторые правила перезаписи и обратный прокси. У меня он в основном работает, за исключением одной проблемы.

У меня есть следующие location определение для прокси-сервера передает все URL-адреса, начинающиеся с / blog /, в другое приложение.

location ~* ^/blog/?(.*) {
  set $forward_host       'another.app.com';
  set $url_full           '$1';

  resolver                8.8.8.8 valid=300s;
  resolver_timeout        10s;

  # always add trailing slash
  rewrite ^([^.]*[^/])$   $1/ permanent;

  index index.html;

  proxy_hide_header       Set-Cookie;
  proxy_set_header        X-Real-IP $remote_addr;
  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header        X-Scheme $scheme;
  proxy_set_header        Host $forward_host;
  proxy_ignore_headers    "Set-Cookie";
  proxy_buffering         off;
  proxy_intercept_errors  on;
  proxy_redirect          off;
  proxy_pass              http://$forward_host/$url_full;
}

Я хочу, чтобы все мои URL заканчивались косой чертой, поэтому я добавил:

rewrite ^([^.]*[^/])$   $1/ permanent;

Все нормально работает при нажатии:

http://nginx-playground.herokuapp.com/blog/

Но когда у меня нет завершающей косой черты и срабатывает правило перезаписи, proxy_pass добавляет внутренний номер ПОРТА Heroku к URL-адресу, и это выглядит примерно так:

http://nginx-playground.herokuapp.com:27348/blog/

Я пробовал много разных вещей, например, устанавливал proxy_redirect, но так и не понял.

Вот ссылка на проект github примера приложения, которое я установил. Вы можете разветвить / клонировать его и попробовать развернуть на heroku, чтобы увидеть, что произойдет самостоятельно.

https://github.com/WeConnect/nginx-playground

В этом случае вам потребуются следующие переменные ENV:

BUILDPACK_URL: https://github.com/ddollar/heroku-buildpack-multi.git
LANG:          en_US.UTF-8
RACK_ENV:      production

Это статья в блоге, которую я использовал в качестве отправной точки: http://blog.codeship.com/how-to-deploy-nginx-on-heroku/

Любая помощь или подсказки были бы очень признательны.