本帖最后由 zimr 于 2024-12-21 19:36 编辑
环境信息:
服务器系统 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 访问,访问正常。
- curl -i test1.test.dev:8443
- HTTP/1.1 302 Moved Temporarily
- Server: openresty
- Date: Sat, 21 Dec 2024 09:40:38 GMT
- Content-Type: text/html
- Content-Length: 142
- Connection: close
- Location: https://test1.test.dev/
- Strict-Transport-Security: max-age=31536000
- <html>
- <head><title>302 Found</title></head>
- <body>
- <center><h1>302 Found</h1></center>
- <hr><center>openresty</center>
- </body>
- </html>
复制代码
处理建议:
通过查看nginx配置 /www/cloud_waf/nginx/conf.d/vhost 中配置文件,得知配置如下:
- ...
- error_page 497 https://$host$request_uri;
- ...
复制代码 在非标端口下 该配置文件稍有一些兼容性问题,在适配标准和非标准端口的时候建议将$host改用 $http_host变量。 或者使用:
- error_page 497 https://$host:$server_port$request_uri;
复制代码
先前尝试手动补充nginx配置,奈何error_page 497 配置优先级高于用户自定部分,所以无论如何解决都无济于事。也尝试手动修改配置文件,发现只要服重启也会被覆盖。无法通过手动修复
一些问题延伸:
如果开启“强制HTTPS” 时候 /www/cloud_waf/nginx/conf.d/vhost 中配置文件会多出一行
- if ($server_port !~ 443) {
- rewrite "^(/.*)[ DISCUZ_CODE_2 ]quot; https://$host$1 permanent;
- }
复制代码 这时候则会影响所有的非标端口 即便是使用 完整协议请求,也会被强制到443端口中
- curl -i https://test1.test.dev:8443/
- HTTP/2 301
- server: openresty
- date: Sat, 21 Dec 2024 10:01:36 GMT
- content-type: text/html
- content-length: 166
- location: https://test1.test.dev/
- strict-transport-security: max-age=31536000
- <html>
- <head><title>301 Moved Permanently</title></head>
- <body>
- <center><h1>301 Moved Permanently</h1></center>
- <hr><center>openresty</center>
- </body>
- </html>
复制代码
同样的该配置文件稍有一些兼容性问题,建议分块处理。将http 和 https配置块分开
- # 当开启强制https时候增加 302或301 可考虑后台有选择
- server {
- listen 0.0.0.0:80; # 标准端口
- server_name test1.test.dev;
- return 302 https://$host:443$request_uri;
- }
- server {
- listen 0.0.0.0:443 ssl http2;
- ...
复制代码
如非标准端口 则只需 ssl块即可 开启https则增加error_page 497处理,如不开启 则取消ssl功能 和error_page 497行
- server {
- listen 0.0.0.0:8443 ssl http2;
- ...
- error_page 497 =302 https://$host:$server_port$request_uri; #302或301 可考虑后台有选择
- ..
复制代码
因用户无法手动修复该问题,所以建议官方考虑完善该配置,完善后将大幅提升各类环境兼容性
|