nginx-使用Clojure和Ring的HTTPS请求
我正在使用Ring和Compojure开发Clojure Web API. 例如: 考虑以下应用程序路由:
我希望路由一仅接受HTTP请求,而路由二仅接受HTTPS请求. 这可能吗? 我尝试使用以下设置运行码头:
这使API可以接受HTTPS请求,但是并没有阻止HTTP请求到相同的路由. 我也尝试过禁用HTTP协议,但是没有运气:
根据我的在线阅读,Ring HTTPS请求的标准过程是使用nginx作为反向代理来管理所有HTTPS请求. 但是我还没有在线找到任何实现. 有任何想法吗? 最佳答案 一种简单的实现方法是检查路由内传入请求的方案,例如:
当然,您可以将此方案检查提取到单独的函数或宏中,因此,即使您有很多路由,这也可能是可行的选择,而不会在代码中产生过多的干扰. 如果您有很多路由,并且不想添加额外的调用或检查每个路由,那么另一种实现此方法的方法是在应用程序中添加一些中间件.中间件可以检查请求中包含的:scheme,并拒绝不符合要求的请求.例如:
棘手的是,您希望有选择地将此中间件应用于某些路由,而不是其他路由,并且Compojure没有提供执行此操作的简单方法.如果在所有http路由和所有https路由(将它们分组)中都有一些公用路径,则可以使用以下模式:
您可以在此处看到中间件已应用于路由的每个子集,因此仅在路径的第一部分匹配时才执行中间件.现在,您可以添加任意数量的路由,中间件将负责所有路由的方案检查.请注意,这种方法要求您可以以某种方式在初始“应用程序路由”路由中标识路由的子集,在这种情况下,我已经通过路径标识了它们. 检查方案时要注意的一件事:警告:如果您决定将SSL卸载到负载均衡器,则此操作将无效.在这种情况下,您的应用程序将始终接收HTTP(而非HTTPS)请求.通常,您可以通过简单地检查X-Forwarded-Proto标头而不是:scheme值来实现相同目的. (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – 生成服务器上找不到rbenv:bundle:命令
- ruby-on-rails – 资产不适用于RoR 4,Nginx,Unicorn
- php5-fpm nginx google bot =连接由同行重置
- nginx – Dokku:从应用程序收听多个端口
- 在Nginx上安装symfony2无法加载CSS
- 身份验证 – Nginx:是否可以从auth_request重新获得响应
- linux – FastCGI启动器
- nginx proxypass重写基本URL
- python-对Dreamhost Passenger Django进行故障排除
- 502运行其他php文件时运行默认laravel应用程序时网关错误