Apache 2.4配置PHP-FPM TCP连接遇503错误及权限问题求助
配置PHP-FPM使用TCP端口127.0.0.1:9040时,Apache返回503 Service Unavailable,错误日志提示权限拒绝;切换为Unix套接字配置后服务恢复正常。相关配置及日志如下:
PHP-FPM配置(/etc/opt/remi/php80/php-fpm.d/www.conf)
[www] user = apache group = apache listen = 127.0.0.1:9040 ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0660 listen.acl_users = apache listen.allowed_clients = 127.0.0.1
Apache虚拟主机配置
<VirtualHost *:80> ServerAdmin admin@site2.sysadmin-uat.co.uk ServerName site2.sysadmin-uat.co.uk DocumentRoot /var/www/site2.sysadmin-uat.co.uk DirectoryIndex info.php ErrorLog /var/log/httpd/site2.sadmin-uat.co.uk-error.log CustomLog /var/log/httpd/site2.sadmin-uat.co.uk-access.log combined # <IfModule mod_proxy.c> # ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9040/ # </IfModule> <IfModule !mod_php8.c> <FilesMatch \.(php|phar)$> # SetHandler "proxy:unix:/var/opt/remi/php80/run/php-fpm/www.sock|fcgi://localhost" SetHandler "proxy:fcgi://127.0.0.1:9040" </FilesMatch> </IfModule> </VirtualHost>
错误日志
[Fri Nov 04 18:00:01.058776 2022] [proxy:error] [pid 10881:tid
139625418974976] (13)Permission denied: AH00957: FCGI: attempt to
connect to 127.0.0.1:9040 (*) failed [Fri Nov 04 18:00:01.058815 2022]
[proxy_fcgi:error] [pid 10881:tid 139625418974976] [client
10.0.2.2:57066] AH01079: failed to make connection to backend: 127.0.0.1
正常运行的Unix套接字配置
SetHandler "proxy:unix:/var/opt/remi/php80/run/php-fpm/www.sock|fcgi://localhost"
SELinux限制是核心原因:默认SELinux策略下,Apache(httpd进程)被禁止发起网络连接,即使是连接本地127.0.0.1的TCP端口也会被拦截。而Unix套接字属于文件系统资源,SELinux对其的权限规则不同,只要套接字文件的上下文和权限符合要求,Apache就能正常访问。
验证方式:临时关闭SELinux(执行
setenforce 0),若服务恢复正常,即可确认是SELinux导致。解决办法:为Apache添加允许网络连接的SELinux规则,执行以下命令(
-P参数表示永久生效):setsebool -P httpd_can_network_connect 1补充说明:
listen.acl_users = apache仅对Unix套接字生效,TCP端口的访问控制依赖listen.allowed_clients,但本次报错是权限拒绝而非连接被拒绝,因此与该配置无关。
内容的提问来源于stack exchange,提问作者Confounder

