2017-05-26 52 views
0

我正試圖讓force_ssl工作。我的意思是我想重定向某人試圖通過http連接到https與應用程序本身。force_ssl甚至在nginx後面並生成https url

該應用程序是Nginx背後的dockerized發佈版本。實際上Nginx正在服務於SSL,我知道我完全可以依靠Nginx來終止ssl連接,甚至可以處理非https請求的重定向。但我想了解如何使其工作,所以如果有一天我跳過代理,我會知道如何做到這一點。訪問通過https一切運行正常的服務器時

config :my_app, MyApp.Endpoint, 
    http: [port: "${PORT}"], 
    url: [host: "${APP_URL}", port: "${APP_PORT}"], 
    force_ssl: [hsts: true], #I tried different options without success 
    server: true, 
    cache_static_manifest: "priv/static/manifest.json", 
    root: ".", 
    version: Mix.Project.config[:version] 

其實:

我的督促/配置看起來像這樣。但是,當使用http地址時,重定向網址如下所示:https://%24%7Bapp_url%7D/並且不起作用。

也許發生這種情況是因爲我沒有給出一個證書文件,沒有它就無法完成整個過程?我認爲force_ssl只是一個基本的重定向,如果請求不是https。

最後我也試圖產生例如HTTPS URL的郵件我有這樣的事情:

<%= password_url(MyApp.Endpoint, :reset_password_from_email, token: @token, email: @email) %> 

但自從我的配置似乎並不好,只產生沒有使用https HTTP鏈接。

也許我應該完全分開這個,在Nginx端或100%在應用端使這100%,但不試圖混合它們兩個?

歡迎任何幫助/想法/評論!

編輯

最後的測試與此:

force_ssl: [rewrite_on: [:x_forwarded_proto], subdomains: true, hsts: true, host: "${APP_URL}"] 

結果與壞網址:https://%24%7Bapp_url%7D/。所以我認爲這是工作,但變種:"${APP_URL}"沒有轉換爲真正的價值。我正在挖掘這個。

回答

0

通過對host: "${APP_URL}"值進行硬編碼解決了我上次編輯中懷疑的問題。

這裏有點問題,因爲所有其他的ENV_VAR都被它們的值替換,但不是這個。