当前位置:论坛首页 > 第三方应用 > Linux面板插件

【免费版Nginx防火墙】

发表在 第三方应用2019-11-7 14:12   [复制链接] 97 338526

发表于 2026-5-29 18:33:24 | 显示全部楼层
为什么香港的服务器装了这个访问所有网页500错误,之前不会这样
使用道具 举报 回复 支持 1 反对 0
发表于 2026-6-8 12:37:39 | 显示全部楼层
500错误了,卸载后正常,再安装还是500错误。
使用道具 举报 回复 支持 反对
发表于 2026-6-9 14:50:37 | 显示全部楼层
都遇到装完之后500错误,卸载之后就正常了是吧
使用道具 举报 回复 支持 反对
发表于 2026-6-9 15:03:34 | 显示全部楼层
pigzhu 发表于 2026-6-8 12:37
500错误了,卸载后正常,再安装还是500错误。

一样的,不知道为啥了
使用道具 举报 回复 支持 反对
发表于 2026-8-9 09:53:16 | 显示全部楼层
bt面板升级最新版v13后,封锁历史:页面时间 ip  站点  等信息NaN/aN/aN aN:aN:aN        undefined        undefined不正常了
使用道具 举报 回复 支持 反对
发表于 2026-8-12 13:55:30 | 显示全部楼层
卓群网络 发表于 2026-8-9 09:53
bt面板升级最新版v13后,封锁历史:页面时间 ip  站点  等信息NaN/aN/aN aN:aN:aN        undefined        undefined不正 ...

我这也是一样,升级最新的宝塔面板,封锁历史,站点配置的站点日志里显示不正确了,
使用道具 举报 回复 支持 反对
发表于 2026-8-13 09:09:28 | 显示全部楼层
宝塔用户_ukfzxd 发表于 2026-8-12 13:55
我这也是一样,升级最新的宝塔面板,封锁历史,站点配置的站点日志里显示不正确了, ...

解决办法:https://zmingcx.com/nginx-free-firewall-patch.html
使用道具 举报 回复 支持 反对
发表于 2026-8-13 09:10:34 | 显示全部楼层
卓群网络 发表于 2026-8-9 09:53
bt面板升级最新版v13后,封锁历史:页面时间 ip  站点  等信息NaN/aN/aN aN:aN:aN        undefined        undefined不正 ...

解决办法:
https://zmingcx.com/nginx-free-firewall-patch.html

大好人哪!  发表于 2026-8-17 18:31
使用道具 举报 回复 支持 反对
发表于 2026-8-17 12:21:38 | 显示全部楼层
宝塔用_64f6 发表于 2026-8-13 09:10
解决办法:
https://zmingcx.com/nginx-free-firewall-patch.html

网站打不开了
使用道具 举报 回复 支持 反对
发表于 2026-8-18 10:40:01 | 显示全部楼层
面板升级最新版v13后日志报错,具体修改方法是把 cgi 替换成 html 库,cgi.escape统一 替换 html.escape,json.loads 处有点区别,这里不转义 html.escape(line, quote=False)。
强烈建议楼主升级新版本,这个每台服务器去修改也有点折腾啊。
使用道具 举报 回复 支持 反对
发表于 2026-8-18 23:03:14 | 显示全部楼层

解决办法:https://www.tjsky.net/tutorial/1792
使用道具 举报 回复 支持 反对
发表于 2026-8-18 23:08:49 | 显示全部楼层
宝塔用户_gudovt 发表于 2026-8-18 10:40
面板升级最新版v13后日志报错,具体修改方法是把 cgi 替换成 html 库,cgi.escape统一 替换 html.escape,j ...

而且还有些其他问题,比如正则部分没有被明确声明为 Raw字符串、对换行符的判断写法有错误导致永远找不到换行点,日志里有空行或者乱码会炸之类的问题。

3.8和3.12是python两个变化比较大的版本,很多3.7时代能接受的语法,到3.13就开始主动报错或者直接罢工了。

所以我和AI一起彻底修了一次,升级到Python3.13环境版本,详见这个:https://www.tjsky.net/tutorial/1792
使用道具 举报 回复 支持 反对
发表于 2026-8-26 11:50:42 | 显示全部楼层
补丁文件应是:free_waf_main.py  替换上去打开提示插件不存在,一核对发现是free_waf_main_AI.py

fd157fe8-00e1-4930-ac21-5f8d52a9c53d.png


使用道具 举报 回复 支持 反对
发表于 2026-8-30 14:16:37 | 显示全部楼层
Linux正式版13.0.0可以用?
使用道具 举报 回复 支持 反对
发表于 前天 15:57 | 显示全部楼层
  1. 标题:宝塔免费防火墙疑似吞掉 POST 请求正文,导致 PHP-FPM 收到空 $_POST

  2. 问题级别:严重,影响生产商城正常创建订单。

  3. 您好,我在使用宝塔免费防火墙时发现一个可以稳定复现的问题:防火墙开启后,部分 application/x-www-form-urlencoded POST 请求正文会在进入 PHP-FPM 前丢失;关闭免费防火墙后,相同请求立即恢复正常。

  4. 一、服务器环境

  5. 系统:Debian

  6. Web 服务:宝塔 Nginx

  7. PHP:8.4,PHP-FPM

  8. 应用:Laravel 13

  9. 免费防火墙入口:
  10. /www/server/panel/vhost/nginx/free_waf.conf

  11. Lua WAF:
  12. access_by_lua_file /www/server/free_waf/waf.lua

  13. 请求正文缓冲区:
  14. client_body_buffer_size 512k

  15. PHP 配置:

  16. enable_post_data_reading = On

  17. post_max_size = 50M

  18. max_input_vars = 1000

  19. auto_prepend_file = no value

  20. 免费防火墙版本:请告知查询方式,如有需要我可以补充准确版本。

  21. 二、故障请求

  22. 请求方法:POST

  23. 路径:/create-order?checkout_flow_id=...

  24. Content-Type:application/x-www-form-urlencoded

  25. Content-Length:238 字节

  26. 表单包含:

  27. _token

  28. gid

  29. spec_id

  30. checkout_token

  31. checkout_flow_id

  32. by_amount

  33. email

  34. search_pwd

  35. 请求正文只有 238 字节,远低于当前配置的 512KB 缓冲区,不属于请求正文过大。

  36. 三、开启免费防火墙时的结果

  37. 即使绕过 Cloudflare、直接请求源站 127.0.0.1,Nginx仍然收到:

  38. Content-Length: 238
  39. 但进入 Laravel/PHP 后检测结果为:

  40. raw_body_length=0
  41. raw_gid_present=false
  42. php_gid_present=false
  43. raw_csrf_present=false
  44. php_csrf_present=false
  45. raw_checkout_token_present=false
  46. php_checkout_token_present=false
  47. raw_spec_present=false
  48. php_spec_present=false
  49. raw_quantity_present=false
  50. php_quantity_present=false
  51. raw_email_present=false
  52. php_email_present=false
  53. raw_search_pwd_present=false
  54. php_search_pwd_present=false
  55. 也就是说:

  56. php://input 为空
  57. $_POST 为空
  58. Nginx访问日志仍显示请求已进入上游,但免费防火墙没有生成任何拦截记录。请求不是被正式拦截,而是正文丢失后继续进入了 PHP。

  59. 四、关闭免费防火墙后的严格对照结果

  60. 关闭宝塔免费防火墙后,使用完全相同的直连源站探针再次请求,结果立即恢复为:

  61. content_length=238
  62. raw_body_length=238
  63. raw_gid_present=true
  64. php_gid_present=true
  65. raw_csrf_present=true
  66. php_csrf_present=true
  67. raw_checkout_token_present=true
  68. php_checkout_token_present=true
  69. raw_spec_present=true
  70. php_spec_present=true
  71. raw_quantity_present=true
  72. php_quantity_present=true
  73. raw_email_present=true
  74. php_email_present=true
  75. raw_search_pwd_present=true
  76. php_search_pwd_present=true
  77. goods_id=102
  78. spec_id=92
  79. 测试返回 HTTP 419 是因为测试时故意使用了无效 CSRF,避免产生真实订单;不影响请求正文完整性判断。

  80. 这个 A/B 测试表明:

  81. 开启免费防火墙:238 字节正文进入 PHP 后变成 0 字节
  82. 关闭免费防火墙:238 字节正文及全部字段完整进入 PHP
  83. 五、已排除的原因

  84. 已直接请求 127.0.0.1 源站,排除 Cloudflare。

  85. PHP-FPM 的 POST 读取配置正常。

  86. post_max_size 和 max_input_vars 足够。

  87. Nginx已正确传递:

  88. fastcgi_param CONTENT_TYPE $content_type

  89. fastcgi_param CONTENT_LENGTH $content_length

  90. 请求正文仅238字节,不存在缓冲区不足。

  91. 关闭免费防火墙后无需修改任何应用代码即可立即恢复。

  92. 应用中没有清空 $_POST 或覆盖整个请求参数的代码。

  93. 六、怀疑位置

  94. 在 /www/server/free_waf/init.lua 中发现多处正文读取操作,例如:

  95. ngx.req.read_body()
  96. ngx.req.get_body_data()
  97. ngx.req.get_body_file()
  98. ngx.req.get_post_args()
  99. 相关位置包括约:

  100. 94
  101. 799
  102. 1249
  103. 1298
  104. 1462
  105. 1663
  106. 1876
  107. 怀疑免费防火墙在 access 阶段检查 POST 参数后,没有在某些运行状态下正确保留请求正文,导致后续 FastCGI/PHP-FPM 接收到空正文。

  108. 七、间歇性特征

  109. 该问题还具有间歇性:

  110. 关闭并重新开启免费防火墙后,网站可能暂时恢复正常。

  111. 正常运行几天后,问题可能再次出现。

  112. 再次关闭免费防火墙后,POST 请求又立即恢复。

  113. 怀疑与 Nginx/Lua Worker 重载、免费防火墙内存配置、规则缓存、规则同步或 Lua 请求正文处理状态有关,而不是普通网站缓存。

  114. 八、当前临时处理

  115. 目前只能将以下两个精确路径加入 URL 白名单,绕过免费防火墙的 POST 正文检查:

  116. ^/create-order$
  117. ^/en/create-order$
  118. 应用本身仍保留 CSRF、会话绑定下单令牌、限速、库存和价格服务端校验,但这只是临时绕过方案。

  119. 九、希望官方修复

  120. 希望技术人员重点检查并修复:

  121. 免费防火墙调用 ngx.req.read_body()、ngx.req.get_post_args() 后,是否始终将原始正文完整保留并传递给 FastCGI。

  122. 是否存在 Lua Worker运行一段时间后,请求正文对象或缓存状态异常的问题。

  123. 当正文读取、解析或临时文件读取失败时,不应静默放行一个空正文请求。

  124. 如果防火墙决定拦截,应返回明确状态码并写入拦截日志。

  125. 如果防火墙决定放行,应保证请求头、Content-Length、原始正文和 POST 参数保持一致。

  126. 希望增加“正文读取失败、正文长度不一致、上游正文丢失”等诊断日志。

  127. 请提供修复补丁、升级版本或官方建议的兼容配置。

  128. 这个问题会导致生产商城随机无法创建订单,前端通常表现为:

  129. gid 不能为空
  130. 购买数量不能为空
  131. 邮箱不能为空
  132. 查询密码不能为空
  133. 实际原因并非用户没有提交字段,而是整份 POST 正文在免费防火墙处理后丢失。

  134. 如需进一步定位,我可以继续提供:

  135. 防火墙开启与关闭状态下的完整关联日志

  136. Nginx最终生效配置

  137. 免费防火墙相关 Lua 代码片段

  138. 可安全复现且不会创建订单的 curl 命令

  139. 对应请求的 flow_id 和 request_id

  140. 请协助确认并修复,谢谢。
复制代码


使用道具 举报 回复 支持 反对
12345
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

紧急运维服务

响应时间:3分钟

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

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

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

点击联系技术分析

工作时间:09:00至18:30

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