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

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

1

主题

4

回帖

10

积分

初学乍练

贡献
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

主题

1655

回帖

2814

积分

Giter

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

使用道具 举报

12

主题

1655

回帖

2814

积分

Giter

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

使用道具 举报

1

主题

4

回帖

10

积分

初学乍练

贡献
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

主题

1655

回帖

2814

积分

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

主题

4

回帖

10

积分

初学乍练

贡献
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, 2025-12-20 11:58 , Processed in 0.067199 second(s), 12 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

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