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-4-EventController对ActionController :: Li
- 在nginx重写中发送额外的标头
- nginx’“map”指令中的参数数量无效
- nginx – 当网址被点击时找不到404页面,但是当从索引页面上
- uWSGI python高负载配置
- Nginx-将特定文件或文件夹从日志记录排除到access.log
- django -supervisorctl总是报告错误:ERROR(没有此类文件)
- php-Magento从旧Urls重定向到具有商店(语言)代码的新Urls
- ubuntu – 为什么这个IPv6 listen指令也不接受IPv4?
- centos – nginx配置 – 可从外部localhost访问