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

EC2实例中PHP脚本SSH执行正常但浏览器访问报500错误

解决EC2 Linux实例上Mailgun脚本CLI正常但浏览器访问500错误的问题

我之前也碰到过几乎一模一样的坑,核心原因其实是Web服务器的运行用户和你CLI里用的ec2-user权限不匹配——哪怕你已经设置了文件权限,父目录的访问权限可能还是卡了脖子。

问题分析

从错误日志能明确看到,PHP找不到/home/ec2-user/vendor/autoload.php,但你说路径正确、CLI运行正常,这说明:

  • 脚本逻辑和Mailgun依赖安装都没问题
  • 问题出在Web服务器(比如Apache)的运行用户没有权限访问/home/ec2-user这个父目录,自然读不到里面的vendor文件

默认情况下,Amazon Linux上Apache的运行用户是apache,而/home/ec2-user的权限通常是700(只有ec2-user自己能访问),apache用户根本进不去这个目录,所以才会报文件找不到的错误。

解决方案(两种可选,推荐第二种)

方案一:调整父目录权限(快速临时解决)

给/home/ec2-user目录添加其他用户的执行权限(让apache能进入目录),同时确保vendor目录的文件能被读取:

# 让其他用户能进入ec2-user的家目录
chmod o+x /home/ec2-user
# 让其他用户能读取vendor下的所有文件
chmod -R o+r /home/ec2-user/vendor

如果想更精准(避免开放给所有用户),可以用ACL给apache用户单独授权:

# 给apache用户添加进入家目录的权限
setfacl -m u:apache:rx /home/ec2-user
# 给apache用户添加读取vendor目录的权限
setfacl -R -m u:apache:r /home/ec2-user/vendor

方案二:迁移vendor目录到Web根目录(推荐,更安全规范)

把vendor目录移到Web服务器默认有权限访问的/var/www/html/下,这也是PHP项目的常规部署方式:

# 移动vendor目录到Web根目录
mv /home/ec2-user/vendor /var/www/html/

然后修改你的PHP脚本里的require路径:

# 原来的路径
# require '/home/ec2-user/vendor/autoload.php';
# 修改为新路径
require '/var/www/html/vendor/autoload.php';

这样Web服务器用户默认就能访问这个目录,不需要额外调整复杂的权限。

验证调整结果

  1. 刷新浏览器访问你的脚本,看是否还出现500错误
  2. 如果还是有问题,查看Web服务器的错误日志(Apache的日志在/var/log/httpd/error_log),确认是否还有权限相关的报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:08