You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP AMQP Lib+Docker环境下RabbitMQ消息重复发送问题排查

排查RabbitMQ消息重复发送问题

可能原因及排查方向

  • 浏览器自动请求favicon.ico触发重复执行
    浏览器访问页面时会默认请求站点的favicon.ico文件,如果Nginx未单独处理该请求,而是将其转发到PHP-FPM执行你的脚本,就会导致脚本被调用两次,发送两条消息。
    排查方式:查看Nginx访问日志(执行docker logs <nginx容器名>),确认是否存在两个请求:一个是你访问的脚本路径,另一个是/favicon.ico。

  • Nginx配置存在重复的请求转发规则
    检查Nginx配置文件,是否有多个location块匹配到目标PHP脚本路径,导致同一请求被多次转发到PHP-FPM。比如同时配置了location ~ \.php$和其他匹配该脚本的规则,或规则存在重叠。

  • 脚本输出的无效资源引用触发二次请求
    即便页面无重定向,如果脚本输出的内容中包含不存在的图片、CSS等资源,浏览器会尝试请求这些资源;若Nginx将不存在的资源也转发到PHP脚本,同样会导致重复执行。

解决方案

  • 单独处理favicon.ico请求
    在Nginx配置中添加专属location块,避免转发到PHP:

    location = /favicon.ico {
        log_not_found off;
        access_log off;
        return 204;
    }
    
  • 清理Nginx重复规则
    确保只有一个location块负责处理PHP脚本请求,标准配置示例:

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
  • 检查脚本资源引用
    确认脚本输出的HTML中没有引用不存在的资源,或为这些资源配置正确的Nginx处理规则。

验证方法

修改PHP脚本,在发送消息的代码前添加请求日志:

file_put_contents('/var/log/php_requests.log', date('Y-m-d H:i:s') . ' - ' . $_SERVER['REQUEST_URI'] . "\n", FILE_APPEND);

通过浏览器访问脚本后,查看日志文件,确认是否有两个不同请求触发了脚本执行。

内容的提问来源于stack exchange,提问作者DannyXCII

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:10:28