前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Nginx反向代理的CakePHP中检测SSL?

如何在Nginx反向代理的CakePHP中检测SSL?

作者头像
习惯说一说
修改2019-08-02 10:01:47
1K0
修改2019-08-02 10:01:47
举报

我使用nginx作为负载平衡器,后面是Apache应用服务器。由于SSL连接在负载平衡器处终止,因此$ b b $ b $ _ SERVER ['HTTPS'] $ b

  找到一个安全的方式来检测应用服务器上的HTTPS。

到目前为止,我把它放到我的CakePHP配置中:

  $ request_headers = getallheaders();

  if((isset($ _ SERVER ['HTTPS'])&& $ _SERVER ['HTTPS'])||(isset($ request_headers ['X-Forwarded-Proto'])&& $ request_headers ['X-Forwarded-Proto'] =='https')){$ ssl = true;

  //覆盖环境vars(ugly),因为CakePHP不会支持X-Forwarded-Proto$ _SERVER ['HTTPS'] ='on';

  $ _ENV ['HTTPS'] ='on';

  } else {

  $ ssl = false;

  }

  然后在nginx配置中,我使用了 proxy_set_header X-Forwarded-Proto https; 将标记添加到负载均衡器和后端应用程序服务器之间的任何请求。

  这完全正常,但任何人直接请求应用程序服务器可能会欺骗他们认为他们正在浏览SSL,当他们不是。我不知道这是否是一个安全风险,但它似乎不是一个好主意。

  这是一个安全风险吗?

  因为使用 X-Forwarded-Proto 看起来像标准的标准,解决方案可能是一个很好的补丁提交给CakePHP核心,所以我认为任何答案都可以合法地涉及编辑核心文件。

解决方案:

  mod_rpaf 会让你这样做。

  这会设定Apache的HTTPS值到“on”基于nginx发送的头,所以Cake将开箱即用(以及Apache中运行的任何其他应用程序)。

  它还会更正REMOTE_ADDR,SERVER_PORT和HTTP_HOST的值。

  这是我的示例config:

  < IfModule mod_rpaf.c>

  RPAF_Enable On

  RPAF_ProxyIPs 127.0.0.1 10.0.0.0/24

  RPAF_SetHostName On

  RPAF_SetHTTPS On

  RPAF_SetPort On

  < / IfModule>

  #如果mod_rewrite重定向,那么我们失去HTTPS状态为REDIRECT_HTTPS。

  #这将重置它。这发生在Cake的前台控制器

  < IfModule setenvif_module>

  SetEnvIf REDIRECT_HTTPS on HTTPS = on

  < / IfModule>

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档