修改Apache与php-fpm启动用户后访问index.php报503错误求助
问题背景
修改Apache和PHP-FPM的启动用户为apps:appsgrp后,访问index.php出现503 Service Unavailable错误,Apache日志存在权限相关报错。
环境信息
- 操作系统:Amazon Linux 2023
- SELinux状态:Enforcing
- Apache版本:2.4.8
- PHP版本:8.2
- 自定义启动用户/组:
apps/appsgrp - 网站根目录:
/var/local/app,所有者为apps:appsgrp
已做配置修改
1. Apache配置(/etc/httpd/conf/httpd.conf)
仅修改User和Group字段为apps、appsgrp,完整配置如下:
ServerRoot "/etc/httpd" Listen 8443 Include conf.modules.d/*.conf User apps Group appsgrp ServerAdmin root@localhost <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/var/local/app/httpd/html" <Directory "/var/local/app/httpd"> AllowOverride None Require all granted </Directory> <Directory "/var/local/app/httpd/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> <IfModule dir_module> DirectoryIndex index.html </IfModule> <Files ".ht*"> Require all denied </Files> ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> <IfModule alias_module> ScriptAlias /cgi-bin/ "/var/local/app/httpd/cgi-bin/" </IfModule> <Directory "/var/local/app/httpd/cgi-bin"> AllowOverride None Options None Require all granted </Directory> <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType text/html .shtml AddOutputFilter INCLUDES .shtml </IfModule> AddDefaultCharset UTF-8 <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> EnableSendfile on IncludeOptional conf.d/*.conf
2. PHP-FPM配置(/etc/php-fpm.d/www.conf)
仅修改user和group字段为apps、appsgrp,配置片段如下:
user apps group appsgrp
错误现象
访问index.php返回503 Service Unavailable,Apache错误日志核心报错:
[proxy:error] [pid xxxx] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:9000 (127.0.0.1) failed
[proxy_fcgi:error] [pid xxxx] AH01079: failed to make connection to backend: 127.0.0.1
排查与解决步骤
1. 检查PHP-FPM服务状态与权限
先确认PHP-FPM是否正常启动,是否存在目录权限问题:
# 查看PHP-FPM运行状态 systemctl status php-fpm # 查看PHP-FPM错误日志 cat /var/log/php-fpm/error.log
- 若PHP-FPM启动失败,大概率是
apps用户无权访问其运行/日志目录,执行以下命令修复:
chown -R apps:appsgrp /var/run/php-fpm/ chown -R apps:appsgrp /var/log/php-fpm/
2. 修复SELinux规则(核心排查点)
由于SELinux处于Enforcing状态,这是最常见的权限阻塞原因:
(1)为apps用户配置正确的SELinux域
# 查看当前用户SELinux域 id -Z apps # 若域不是unconfined_u,执行以下命令添加 semanage login -a -s unconfined_u apps
(2)允许Apache访问PHP-FPM端口
# 为9000端口添加HTTP服务标签 semanage port -a -t http_port_t -p tcp 9000
- 若使用Unix Socket而非TCP端口,需修正Socket文件的SELinux上下文:
chcon -t httpd_sys_rw_content_t /var/run/php-fpm/www.sock
(3)修正网站目录的SELinux上下文
# 标记网站目录为HTTP可访问内容 chcon -R -t httpd_sys_content_t /var/local/app/httpd/html # 若网站有上传/写入需求,添加可写标签 chcon -R -t httpd_sys_rw_content_t /var/local/app/httpd/html/upload # 替换为实际写入目录
(4)临时验证SELinux影响
若不确定是否为SELinux问题,可临时切换为Permissive模式测试:
setenforce 0
若此时访问正常,说明是SELinux规则问题,修复后恢复Enforcing:
setenforce 1
3. 检查Apache代理配置与模块
确认Apache已正确配置PHP-FPM代理并加载必要模块:
# 检查是否加载proxy与proxy_fcgi模块 httpd -M | grep -E "proxy|proxy_fcgi"
- 若未加载,添加模块配置:
echo "LoadModule proxy_module modules/mod_proxy.so" >> /etc/httpd/conf.modules.d/00-proxy.conf echo "LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so" >> /etc/httpd/conf.modules.d/00-proxy.conf
- 确保
conf.d/php.conf中代理配置正确:
<FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch>
4. 修复目录权限递归性
确保网站目录所有子文件/目录都继承apps:appsgrp权限:
chown -R apps:appsgrp /var/local/app/ chmod -R 755 /var/local/app/httpd/html # 保证目录可执行、文件可读取
5. 重启服务验证
完成所有修改后,重启Apache与PHP-FPM:
systemctl restart httpd php-fpm
再次访问index.php验证是否恢复正常。
内容的提问来源于stack exchange,提问作者Junhong

