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

MacOS下Supervisord运行Laravel应用出现Guzzle/Curl error 7问题

问题解决步骤

这个问题核心是Supervisor托管进程的运行环境与你手动执行命令的环境不一致,导致网络出站请求被阻断,按以下顺序排查即可:

1. 修正Supervisor程序配置的用户与环境变量

你手动执行命令时的用户、代理等环境变量不会被Supervisor默认继承,需要显式配置:

  • 在你的octane和测试用的curl_test配置块中添加user参数,值为你手动执行php artisan octane:start时使用的普通用户名(如ubuntu、www-data等,不推荐直接用root)
  • 如果你当前网络需要代理才能访问外网,添加environment参数声明代理环境变量

修改后测试配置参考:

[program:curl_test]
process_name=%(program_name)s
user=ubuntu # 替换为你自己的用户名
# 无代理可删除下一行
environment=http_proxy="http://127.0.0.1:7890",https_proxy="http://127.0.0.1:7890"
command=/bin/sh -c "curl -v google.com"
autostart=true
loglevel=debug
autorestart=false
stdout_logfile=/tmp/curl-test.log
redirect_stderr=true

修改完成后重载配置生效:
supervisorctl reread && supervisorctl update
重启测试程序查看日志是否恢复正常。

2. 排查系统安全模块限制

SELinux、AppArmor等安全模块默认会阻断后台服务的网络出站请求:

  • 如果你使用CentOS/RHEL/Fedora系统:
    临时关闭SELinux验证:setenforce 0
    若测试正常,永久放行后台服务网络权限:
    setsebool -P httpd_can_network_connect on
  • 如果你使用Debian/Ubuntu系统:
    临时卸载Supervisor的AppArmor规则验证:apparmor_parser -R /etc/apparmor.d/supervisor
    若测试正常,调整AppArmor规则允许Supervisor管理的进程访问网络即可。

3. 排查systemd对Supervisor的网络限制

当前主流发行版的Supervisor均由systemd托管,默认可能开启网络隔离限制:
打开Supervisor的systemd配置文件(路径通常为/usr/lib/systemd/system/supervisor.service或/etc/systemd/system/supervisor.service),检查是否存在以下配置项:

  • PrivateNetwork=true
  • RestrictAddressFamilies=~AF_INET AF_INET6
  • IPAddressDeny=any

删除上述限制项后执行:
systemctl daemon-reload && systemctl restart supervisor
再测试请求是否正常。

4. 排查iptables/ufw规则限制

部分防火墙规则会针对root用户或后台进程组做出站限制,可先手动以root身份执行curl验证:
sudo curl -v google.com
若root身份执行也报错,调整防火墙规则放开对应用户的出站访问,或者始终使用普通用户运行Supervisor托管的程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:36:02