У меня есть стандартное приложение 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/
Любая помощь или подсказки были бы очень признательны.