我刚刚尝试添加这个包装(-> 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上为你工作的步骤? –