返回列表 发帖
查看: 3805|回复: 5

[已解决] X3.5 新安装套了CloudFlare, 无法登录

1

主题

0

粉丝

0

关注

初学乍练

贡献
0 点
金币
5 个
发表于 2023-6-16 15:39:39 |上海| 查看全部 |阅读模式
我按照文档, 安装好Discuz X3.5, 用haproxy+ssl证书使用没有问题, 可以登录, 验证码也可以正常使用。 问题出在套了CloudFlare后, 登录的url schema变成了http

WX20230616-152635@2x.png

我按照专家的一些帖子修改了一些配置
  1. $_config['ipgetter']['setting'] = 'header';
  2. $_config['ipgetter']['header']['header'] = 'HTTP_CF_CONNECTING_IP';
  3. $_config['output']['upgradeinsecure'] = 1;
复制代码

CF的配置

cf-rule.png


我的站点目前的结构是
Internet => CloudFlare CDN (free) => Haproxy => Apache/PHP runtime

Discuz X3.5是刚刚从官网上下载的, 没有安装任何主题和插件。 部署方式为论坛+ucenter

请各位高手帮忙诊断一下, 问题出在什么地方?
1 贡献

最佳答案

og01 发表于 2023-6-16 16:43
专家您好, 我正是看了很多您的帖子来解决各种discuz的问题, 首先非常感谢。

对于我出现的这个问题,  ...

haproxy层做了ssl卸载么?
这种情况很有可能是请求到达php层的时候已经不再具备https特征,以至于系统无法正常识别。
Discuz默认是会对进来的请求的属性进行猜测的:
  1.         private function _is_https() {
  2.                 // PHP 标准服务器变量
  3.                 if(isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') {
  4.                         return true;
  5.                 }
  6.                 // X-Forwarded-Proto 事实标准头部, 用于反代透传 HTTPS 状态
  7.                 if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
  8.                         return true;
  9.                 }
  10.                 // 阿里云全站加速私有 HTTPS 状态头部
  11.                 // Git 意见反馈 https://gitee.com/Discuz/DiscuzX/issues/I3W5GP
  12.                 if(isset($_SERVER['HTTP_X_CLIENT_SCHEME']) && strtolower($_SERVER['HTTP_X_CLIENT_SCHEME']) == 'https') {
  13.                         return true;
  14.                 }
  15.                 // 西部数码建站助手私有 HTTPS 状态头部
  16.                 // 官网意见反馈 https://discuz.dismall.com/thread-3849819-1-1.html
  17.                 if(isset($_SERVER['HTTP_FROM_HTTPS']) && strtolower($_SERVER['HTTP_FROM_HTTPS']) != 'off') {
  18.                         return true;
  19.                 }
  20.                 // 服务器端口号兜底判断
  21.                 if(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
  22.                         return true;
  23.                 }
  24.                 return false;
  25.         }
复制代码

但前提是传入的内容至少要携带以上判断条件中的其中一项属性,系统才能识别。

你可以尝试在php层写一个
  1. var_dump($_SERVER);
复制代码
把php层实际接收到的参数都打出来,看看你的配置实际是什么情况。
回复

使用道具 举报

12

主题

4

粉丝

0

关注

Giter

贡献
151 点
金币
362 个
发表于 2023-6-16 16:15:45 |辽宁| 查看全部
你既然是新安装的,那你直接在已经套好cloudflare的情况下重新安装一下吧。
毕竟手动改步骤不少,还挺麻烦的,你也没啥资料需要保留。
安装完以后记得完成这步 https://www.dismall.com/thread-15034-1-1.html
回复

使用道具 举报

12

主题

4

粉丝

0

关注

Giter

贡献
151 点
金币
362 个
发表于 2023-6-16 16:18:03 |辽宁| 查看全部
如果你一定要手动改,首先需要解决进入后台的问题,在config里解除限制以后进入后台更新缓存,http基本上就没有了。
但此时你的头像大概率还是加载不出来,你还需要把discuz里的uc api和uc里的api里面的http都换成https,才算解决问题,然后再更新缓存。
回复

使用道具 举报

1

主题

0

粉丝

0

关注

初学乍练

贡献
0 点
金币
5 个
 楼主| 发表于 2023-6-16 16:43:29 |上海| 查看全部
专家 发表于 2023-6-16 16:15
你既然是新安装的,那你直接在已经套好cloudflare的情况下重新安装一下吧。
毕竟手动改步骤不少,还挺麻烦 ...

专家您好, 我正是看了很多您的帖子来解决各种discuz的问题, 首先非常感谢。

对于我出现的这个问题, 比较奇怪, 所以我来论坛求助。 我搜索引擎找不到其他的线索。

我尝试过套好CF安装论坛, 同样不行, 出现一样的问题。 我现在是两台机器测试, 一台改了hosts直接指到内网的haproxy https反代discuz, 这样访问时没问题的。 全程https

一台走CF反代, 就出现了 http, 所以我怀疑是CF回源请求是不是有问题, 但是CF里ssl设置的是Full(Strict), 所以不太会出现请求http的问题
回复

使用道具 举报

12

主题

4

粉丝

0

关注

Giter

贡献
151 点
金币
362 个
发表于 2023-6-16 18:18:57 |辽宁| 查看全部
og01 发表于 2023-6-16 16:43
专家您好, 我正是看了很多您的帖子来解决各种discuz的问题, 首先非常感谢。

对于我出现的这个问题,  ...

haproxy层做了ssl卸载么?
这种情况很有可能是请求到达php层的时候已经不再具备https特征,以至于系统无法正常识别。
Discuz默认是会对进来的请求的属性进行猜测的:
  1.         private function _is_https() {
  2.                 // PHP 标准服务器变量
  3.                 if(isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) != 'off') {
  4.                         return true;
  5.                 }
  6.                 // X-Forwarded-Proto 事实标准头部, 用于反代透传 HTTPS 状态
  7.                 if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
  8.                         return true;
  9.                 }
  10.                 // 阿里云全站加速私有 HTTPS 状态头部
  11.                 // Git 意见反馈 https://gitee.com/Discuz/DiscuzX/issues/I3W5GP
  12.                 if(isset($_SERVER['HTTP_X_CLIENT_SCHEME']) && strtolower($_SERVER['HTTP_X_CLIENT_SCHEME']) == 'https') {
  13.                         return true;
  14.                 }
  15.                 // 西部数码建站助手私有 HTTPS 状态头部
  16.                 // 官网意见反馈 https://discuz.dismall.com/thread-3849819-1-1.html
  17.                 if(isset($_SERVER['HTTP_FROM_HTTPS']) && strtolower($_SERVER['HTTP_FROM_HTTPS']) != 'off') {
  18.                         return true;
  19.                 }
  20.                 // 服务器端口号兜底判断
  21.                 if(isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) {
  22.                         return true;
  23.                 }
  24.                 return false;
  25.         }
复制代码

但前提是传入的内容至少要携带以上判断条件中的其中一项属性,系统才能识别。

你可以尝试在php层写一个
  1. var_dump($_SERVER);
复制代码
把php层实际接收到的参数都打出来,看看你的配置实际是什么情况。
回复 1

使用道具 举报

1

主题

0

粉丝

0

关注

初学乍练

贡献
0 点
金币
5 个
 楼主| 发表于 2023-6-16 20:27:49 |上海| 查看全部
专家 发表于 2023-6-16 18:18
haproxy层做了ssl卸载么?
这种情况很有可能是请求到达php层的时候已经不再具备https特征,以至于系统无 ...

多谢专家, 我检查了haproxy的设置, 发现了问题

由于之前没有套CDN的情况下在HAProxy上面加了一个http头
  1. http-request add-header X-Forwarded-Proto https if { ssl_fc }
复制代码

导致php这边收到的是这样的
  1.   ["HTTP_X_FORWARDED_PROTO"]=>
  2.   string(19) "https, https, https"
复制代码

有3个https, 估计php在这里解析出错了

我把haproxy的那行配置去掉了, 就正常了, 非常感谢 @专家
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2026-3-14 12:32 , Processed in 0.047420 second(s), 15 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2026 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表