我剛剛嘗試添加這個包裝(-> routes (wrap-ssl-redirect))
用於將http自動重定向到https,但是當我部署到heroku時,https://
在我的瀏覽器中未變綠,並且網站無法加載。Clojure:在heroku上wrap-ssl-redirect?
是不是默認的heroku端口443
,這也應該是默認的wrap-ssl-redirect
函數?
出了什麼問題?
謝謝!
編輯:
我的代碼:
(defn prod-app [routes]
(-> routes
(wrap-keyword-params)
(wrap-params)
(wrap-ssl-redirect)))
(defn -main []
(let [port (Integer/parseInt (get (System/getenv) "PORT" "5000"))]
(jetty/run-jetty (prod-app domain-specific-routes)
{:port port :join? false})))
編輯2:
我剛剛發現這個線程可能解決我的問題:Clojure/Noir: Force HTTPS, redirect if the request was http:// to https://
想出了這個require-https
處理器FN :
(defn https-url [request-url]
(str "https://"
(:server-name request-url)
":"
(:server-port request-url)
(:uri request-url)))
(defn require-https
[handler]
(fn [request]
(if (and (= (:scheme request) :http)
(= (get-in request [:headers "host"]) "secure.mydomain.com"))
(ring.util.response/redirect (https-url request))
(handler request))))
但是,當我嘗試連接到http://secure.mydomain.com
,我在瀏覽器地址欄https://secure.mydomain.com:80/
seing一個端口,並得到這個消息ERR_SSL_PROTOCOL_ERROR
。
您需要在Heroku上正常綁定到端口環境變量。你的日誌顯示任何消息? –
我在日誌中沒有看到任何問題。現在,如果我嘗試使用'( - > routes(wrap-ssl-redirect {:ssl-port(Integer/parseInt(get(System/getenv)「PORT」「5000」))}' 'status = 301'並且瀏覽器在我的域名旁邊顯示一個5位數的端口在我的heroku配置中,我沒有'PORT'變種 – leontalbot
你可以用有問題的日誌更新你的問題,複製你正在追蹤的步驟,以及過去在Heroku上爲你工作的步驟? –