当前位置:论坛首页 > BUG提交 > Linux面板

【已记录】堡塔云WAF非标端口开启HTTPS时重定向BUG

发表在 BUG提交2024-12-21 17:58 [复制链接] 12 24067

环境信息:

服务器系统 Ubuntu 22.04.5 LTS x86_64
堡塔云WAF版本:单机版本 v5.1 / 集群版 v2.0

客户端操作系统 macOS Sequoia 15.1.1
客户端浏览器版本 Firefix 133.0.3 (aarch64)/ Google Chrome  131.0.6778.205(正式版本) (arm64) / curl 8.10.1 (aarch64-apple-darwin24.0.0)




问题复现流程:

1. 添加一个网站 test.test.dev 按照常规端口80(http) / 443(https) 添加,一切正常。
2. 再次添加一个网站test1.test.dev 选择自定义 8080(http) / 8443(https) 访问, 问题出现


问题证实:

浏览器打开 test1.test.dev:8443 访问,浏览器被重定向到了HTTPS 443端口。
浏览器打开 https://test1.test.dev:8443 访问,访问正常。

  1. curl -i test1.test.dev:8443
  2. HTTP/1.1 302 Moved Temporarily
  3. Server: openresty
  4. Date: Sat, 21 Dec 2024 09:40:38 GMT
  5. Content-Type: text/html
  6. Content-Length: 142
  7. Connection: close
  8. Location: https://test1.test.dev/
  9. Strict-Transport-Security: max-age=31536000

  10. <html>
  11. <head><title>302 Found</title></head>
  12. <body>
  13. <center><h1>302 Found</h1></center>
  14. <hr><center>openresty</center>
  15. </body>
  16. </html>
复制代码


1735476372834.jpg


1735476553613.jpg



按照相关标准,在使用标准端口的时候如用户没有开启80端口则使用http://  访问,如用户开启SSL,则使用443端口 https:// 来访问。 这里没有问题的


但堡塔WAF中增了“其他”端口 并且支持设置SSL证书,也就是支持非标端口HTTP和HTTPS访问。这时候就有一些问题。


设置一个 非标的HTTP 端口 8080 访问是没有问题的,因为不涉及重定向

但如果设置一个非标HTTPS端口 8443 访问上是有一定问题的






使用非标端口的预期 :


8443端口开启SSL:   用户直接访问  test1.test.dev:8443  是需要重定向到 https://test1.test.dev:8443 而不是https://test1.test.dev/




非标端口下 开启和关闭强制HTTPS 应不影响非标端口重定向。而不是 将https://test1.test.dev:8443 重定向到


https://test1.test.dev/



















处理建议:

通过查看nginx配置 /www/cloud_waf/nginx/conf.d/vhost 中配置文件,得知配置如下:
  1. ...
  2. error_page 497 https://$host$request_uri;
  3. ...
复制代码
在非标端口下 该配置文件稍有一些兼容性问题,在适配标准和非标准端口的时候建议将$host改用 $http_host变量。 或者使用:
  1. error_page 497 https://$host:$server_port$request_uri;
复制代码

先前尝试手动补充nginx配置,奈何error_page 497 配置优先级高于用户自定部分,所以无论如何解决都无济于事。也尝试手动修改配置文件,发现只要服重启也会被覆盖。无法通过手动修复



一些问题延伸:


如果开启“强制HTTPS” 时候 /www/cloud_waf/nginx/conf.d/vhost 中配置文件会多出一行
  1.     if ($server_port !~ 443) {
  2.         rewrite "^(/.*)[        DISCUZ_CODE_2        ]quot; https://$host$1 permanent;
  3.     }
复制代码
这时候则会影响所有的非标端口 即便是使用 完整协议请求,也会被强制到443端口中
  1. curl -i https://test1.test.dev:8443/
  2. HTTP/2 301
  3. server: openresty
  4. date: Sat, 21 Dec 2024 10:01:36 GMT
  5. content-type: text/html
  6. content-length: 166
  7. location: https://test1.test.dev/
  8. strict-transport-security: max-age=31536000

  9. <html>
  10. <head><title>301 Moved Permanently</title></head>
  11. <body>
  12. <center><h1>301 Moved Permanently</h1></center>
  13. <hr><center>openresty</center>
  14. </body>
  15. </html>
复制代码


1735476696222.jpg



同样的该配置文件稍有一些兼容性问题,建议分块处理。将http 和 https配置块分开
  1. # 当开启强制https时候增加 302或301 可考虑后台有选择
  2. server {
  3.     listen 0.0.0.0:80;  # 标准端口
  4.     server_name test1.test.dev;
  5.     return 302 https://$host:443$request_uri;
  6. }
  7. server {
  8.     listen 0.0.0.0:443 ssl http2;
  9.     ...
复制代码

如非标准端口 则只需 ssl块即可 开启https则增加error_page 497处理,如不开启 则取消ssl功能 和error_page 497行
  1. server {
  2.     listen 0.0.0.0:8443 ssl http2;
  3.     ...
  4.     error_page 497 =302 https://$host:$server_port$request_uri;  #302或301 可考虑后台有选择
  5.     ..
复制代码



因用户无法手动修复该问题,所以建议官方考虑完善该配置,完善后将大幅提升各类环境兼容性




2024-12-29 更新

由于迟迟没有得到官方回复,无法得知该问题是否会修复或者其他计划。 所以编写了如下脚本。 需要的朋友自取

用于修复 “不合理” 的配置,设置定时任务。每分钟执行一次检查,如果nginx配置中存在 error_page 497 https://$host$request_uri; 这个配置,则替换为 error_page 497 https://$hostserver_port$request_uri; 并重载docker nginx

  1. #!/bin/bash

  2. # 定义需要搜索和替换的字符串
  3. search="error_page 497 https://\$host\$request_uri;"
  4. replace="error_page 497 https://\$host:\$server_port\$request_uri;"

  5. # 定义配置文件所在的目录路径
  6. config_dir="/www/cloud_waf/nginx/conf.d/vhost/"

  7. # 标记是否进行了修改
  8. changes_made=0

  9. # 遍历目录下的所有.conf文件
  10. for file in $config_dir*.conf; do
  11.     # 检查文件中是不合理的配置,并统计匹配的数量
  12.     match_count=$(grep -cF "$search" "$file")

  13.     if [ $match_count -gt 0 ]; then
  14.         echo "在 $file 中找到 $match_count 个错误配置"
  15.         # 使用sed进行替换操作,确保替换所有的实例
  16.         sed -i "s|$search|$replace|g" "$file"
  17.         changes_made=1
  18.         echo "已修复 $file 中的 $match_count 个配置"
  19.     fi
  20. done

  21. # 如果有文件被修改,则重新加载nginx配置
  22. if [ $changes_made -eq 1 ]; then
  23.     echo "正在重新加载Nginx配置..."
  24.     docker exec -it cloudwaf_nginx nginx -s reload
  25. else
  26.     echo "没有发现需要修复的配置。"
  27. fi
复制代码

存储为 /opt/fix_nginx_config.sh

授予执行权限 chmod +x /opt/fix_nginx_config.sh

并设置定时任务 crontab -e
  1. # 修复定向
  2. * * * * * /bin/bash /opt/fix_nginx_config.sh
复制代码









使用道具 举报 只看该作者 回复
发表于 2024-12-21 23:26:51 | 显示全部楼层
这个问题我也遇到了,利用爱快端口映射曲线救国效果并不理想,希望官方能早日修复。
使用道具 举报 回复 支持 反对
发表于 2024-12-22 09:16:01 | 显示全部楼层
这个问题我也遇到了,希望官方尽快修复此bug,严重影响我使用
使用道具 举报 回复 支持 反对
发表于 2024-12-22 15:39:08 | 显示全部楼层
确实有这个问题   还特意让朋友试了试    希望尽快修复一下  谢谢!
使用道具 举报 回复 支持 反对
发表于 2024-12-22 19:08:00 | 显示全部楼层
确实有这个问题   还特意让朋友试了试    希望尽快修复一下  谢谢!
使用道具 举报 回复 支持 反对
发表于 2024-12-23 11:11:32 | 显示全部楼层
按照楼主的情况,试了下我的非标端口8443,开启SSL后 确实被强制重定向到了443。 单机版本 v5.1
确实存在这个问题,希望尽快解决
使用道具 举报 回复 支持 反对
发表于 2024-12-23 12:40:53 | 显示全部楼层
本帖最后由 宝塔用户_ahozsd 于 2024-12-23 14:23 编辑

我也遇到这个问题了,家宽没有80/443,只能使用非标端口,这个问题挺困扰的,希望官方修复这个bug
使用道具 举报 回复 支持 反对
发表于 2024-12-23 13:58:30 | 显示全部楼层
宝塔用户_ahozsd 发表于 2024-12-23 12:40
我也遇到了类似问题,明明账号密码都对 就是进不去,忘官方赶紧修复bug

啊... 这...
使用道具 举报 回复 支持 反对
发表于 2024-12-23 22:35:57 | 显示全部楼层
同问题,我也遇到了,请官方看一下这个问题吧
使用道具 举报 回复 支持 反对
发表于 2024-12-24 11:26:31 | 显示全部楼层
确实存在这个问题,由于家宽没有标准端口,只能使用非标端口,无奈换雷池了,期待官方修复
使用道具 举报 回复 支持 反对
发表于 2025-1-2 14:08:21 | 显示全部楼层
您好,感谢您的反馈,已记录
使用道具 举报 回复 支持 反对
发表于 2025-2-11 08:07:53 | 显示全部楼层
堡塔运维南一 发表于 2025-1-2 14:08
您好,感谢您的反馈,已记录

一个多月了,预计什么时候可以修复这个问题?
使用道具 举报 回复 支持 反对
发表于 2025-2-14 14:45:53 | 显示全部楼层
堡塔运维南一 发表于 2025-1-2 14:08
您好,感谢您的反馈,已记录

俩个多月了,预计什么时候会修复?
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

立即付费处理

工作时间:09:00至24:00

快速回复 返回顶部 返回列表