解决雷池 WAF 重定向问题
解决雷池 WAF 重定向问题
狂犬主子解决雷池 WAF 重定向问题
问题
源站服务器是 HTTP Only 的,通过 8000 端口接入雷池 WAF,然后接入 Cloudflare CDN
这里假设源站为http://192.168.1.1:8000 ,雷池 WAF 为http://20.0.0.1:80 ,CDN 访问为https://example.com
此时假如源站有个接口为http://192.168.1.1:8000/api ,由于未设置伪静态,会跳转到目录http://192.168.1.1:8000/api/ ,此时在外访问https://example.com/api 就会跳转到http://example.com:8000/api/ ,但在外直接访问https://example.com/api/ 却正常
如果源站为http://192.168.1.1:80 ,雷池WAF也为相同的端口号http://20.0.0.1:80 ,CDN 访问为https://example.com ,此时在外访问https://example.com/api 就会跳转到http://example.com:8000/api/
有时即使访问正常,浏览器打开开发者工具会发现要在http和https反复横跳多次后才能跳转到目标网页
解决
要解决这个问题,我们需要修改雷池WAF的Nginx配置文件
本人已经尝试修改 CDN 规则、源站套证书、443端口回源,均无法解决,除非使网站全程 HTTPS Only
如雷池安装到 /data
目录,那么对应Nginx配置文件就在 /data/safeline/resources/nginx/sites-enabled
1 | root@waf-server:~# ls /data/safeline/resources/nginx/sites-enabled |
具体是哪个配置文件,可以在WAF的Web后台点击对应站点进行查看,如:
1 | https://192.168.1.1:9443/sites/detail?id=10 |
说明对应配置文件为 10
打开配置文件可以发现有很多设置,可能每次在Web后台修改都会自动重新修改,不过我们发现还有一个目录叫做 custom_params
,里面可以直接增加反代相关 location 节的参数
1 | root@waf-server:~# ls /data/safeline/resources/nginx/custom_params |
我们只需要在对应ID的配置内加上重定向语法即可,这个网上一搜一大把,主要靠 rewrite
和 proxy_redirect
实现,可以实现很多效果
处理协议:
1 | proxy_redirect http:// $http_X_Forwarded_Proto://; |
当然此处给出的不一定是最完美的,请根据实际需求修改
最后执行命令重启 Nginx 使修改后的配置生效
1 | root@waf-server:~# docker restart safeline-tengine |
或者先测试配置后重载:
1 | # 测试nginx配置是否正确 |
重启 Nginx 后如果所有站点都无法访问,说明配置有误,请删除或修改错误的配置直到重启 Nginx 后服务正常访问
此时通过 curl 测试访问,就可以得到预期的结果
1 | curl -v https://example.com/api |