Я запускаю приложение Rails 5.2 на виртуальной машине Ubuntu, предоставленной моей организацией. Обслуживается Nginx (1.14.0) и Passenger (6.0.1).
SSL предоставляется организацией через балансировщик нагрузки. Мое приложение размещено на myapp1 во внутренней сети, и организация предоставляет общедоступный myapp.org.com, который предоставляет SSL конечному пользователю и передает трафик через HTTP по внутренней сети на myapp1. У меня нет контроля над балансировщиком нагрузки на myapp.org.com.
Приложение также обслуживается в подкаталоге / project. Когда я получаю доступ к https://myapp.org.com/,, я получаю 403 с моего сервера Nginx, как и ожидалось (на данный момент). Когда я получаю доступ к https://myapp.org.com/projects,, я получаю бесконечный цикл перенаправления 301 (перенаправление на тот же URL-адрес ...).
Мой конфиг Nginx выглядит так:
server {
listen 80;
server_name myapp myapp.org.com myapp.organisation.com;
add_header X-Forwarded-Proto https;
root /var/www;
location ~ ^/project(/.*|$) {
# Tell Nginx and Passenger where your app's 'public' directory is
alias /var/www/project-production/current/public/$1;
# Turn on Passenger
passenger_ruby /usr/share/rvm/gems/ruby-2.5.3@project-production/wrappers/ruby;
passenger_base_uri /project;
passenger_app_root /var/www/project-production/current;
passenger_document_root /var/www/project-production/current/public;
rails_env production;
passenger_enabled on;
}
}
А config/environments/production.rb
содержит config.force_ssl = true
.
Пытаясь решить эту проблему, я также пытался использовать proxy_set_header X-Forwarded-Proto https;
, а не заголовок X-Forwarded-Proto
.
Если я установлю config.force_ssl = false
, он перенаправляется на http, и SSO организации отказывается обслуживать приложение.
Все связанные посты, которые я могу найти в SO и в Интернете, говорят об использовании Nginx в качестве прокси-сервера для локального сервера Rails (например, Unicorn или Passenger standalone), но эта проблема, очевидно, отличается тем, что Nginx обслуживает http запросы к удаленному прокси с поддержкой SSL.