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

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

作者头像
习惯说一说
修改2019-08-02 10:01:47
1.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 Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档