【发布时间】:2017-03-01 09:21:49
【问题描述】:
我正在使用 Ring 和 Compojure 开发 Clojure Web API。 API 需要能够接受基于指定路由的 HTTP 和 HTTPS 请求。
例如:
考虑以下应用程序路由:
(defroutes app-routes
(POST "/route-one" {request :request} (processRequet request))
(POST "/route-two" {request :request} (processRequet request)))
我希望 route-one 只接受 HTTP 请求,route-two 只接受 HTTPS 请求。
这可能吗?
我尝试使用以下设置运行 jetty:
(jetty/run-jetty #'app {:join? false :ssl? true :ssl-port 8443 :keystore "./resources/keystore.jks" :key-password "12345678"})
这使 API 能够接受 HTTPS 请求,但不会阻止对相同路由的 HTTP 请求。
我还尝试禁用 HTTP 协议,但没有成功:
(jetty/run-jetty #'app {:port 5000 :join? false :ssl? true :ssl-port 8443 :keystore "./resources/keystore.jks" :key-password "12345678" :http? false})
根据我在网上阅读的内容,Ring HTTPS 请求的标准程序是使用 nginx 作为反向代理来管理所有 HTTPS 请求。
但是我在网上没有找到任何实现。
有什么想法吗?
【问题讨论】:
-
你看过pedestal.io了吗?它具有用于处理多个“服务器”的配置,我认为这适合您的情况。
标签: nginx https clojure routes ring