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值来实现相同目的. (编辑:4S站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- amazon-web-services – 为什么我得到ElasticBeanstalk ::
- nginx-加载SVG时出错-ERR_CONTENT_DECODING_FAILED
- ruby-on-rails – 当从私有NIC访问时,Rails显示IP为127.0.0
- 如何在Amazon EC2 AMI实例上使用nginx一致地设置PHP-FPM 5.
- nginx 504 gateway time out
- nginx入口Jenkins路径重写配置不起作用
- NGINX / Apache RewriteMap
- Nginx返回一个假的200状态代码的空json对象
- nginx从1.2.1更新到1.9.2后,PHP-FPM状态页面为空白
- ruby-on-rails-Nginx与乘客的重写规则