簡體   English   中英

使用Rails config.force_ssl在遠程SSL代理后面進行無限重定向

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM