![](/img/trans.png)
[英]What can be the reason for 'config.force_ssl = false' in rails app?
[英]Infinite redirects with Rails config.force_ssl behind a remote SSL proxy
我在組織提供的Ubuntu VM上運行Rails 5.2應用程序。 它由Nginx(1.14.0)和Passenger(6.0.1)提供。
SSL由組織通過負載平衡器提供。 我的應用程序托管在內部網絡的myapp1上,並且該組織提供了一個面向公眾的myapp.org.com,該應用程序向最終用戶提供SSL,並通過HTTP通過內部網絡將流量代理到myapp1。 我無法控制myapp.org.com上的負載平衡器。
該應用程序也可以在/ project子目錄中找到。 當我訪問https://myapp.org.com/時 ,按預期(現在)從Nginx服務器收到403。 當我訪問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獨立),但是這個問題似乎很明顯,因為Nginx正在將http請求提供給啟用了SSL的遠程代理。
您組織的負載平衡器必須將X-Forwarded-Proto傳遞給您的nginx實例。 您的應用程序無法檢測到由ssl終止的負載均衡器正在瀏覽它。 如果它不起作用,則可能需要在應用程序內部將負載均衡器的IP列入白名單。 (我不知道如何,我不編碼紅寶石)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.