我正在尝试安装一个自定义 Web 应用程序,并使用 Apache HTTPd 作为前端 Web 服务器。但为什么 Apache 报告无法访问应用程序侦听的 Unix 套接字?
Web 应用程序配置为在此处监听:
# ls -l /run/mt_plackup_master.sock
srwxrwxrwx. 1 apache apache 0 Jan 18 21:16 /run/mt_plackup_master.sock
我手动制作chown apache:apache
并chmod 777
授予套接字文件的所有可能的权限。
用户apache
可以访问该文件:
# su apache -s /bin/sh -c "curl --unix-socket /run/mt_plackup_master.sock --head localhost"
HTTP/1.1 301 Moved Permanently
Location: some_sub_page/
Date: Tue, 18 Jan 2022 20:21:56 GMT
Connection: keep-alive
但是 Apache 提供 HTTP 503 服务不可用并写入错误日志:
[Tue Jan 18 21:16:32.738727 2022] [proxy:error] [pid 864514:tid 139775709259520] (13)Permission denied: AH02454: HTTP: attempt to connect to Unix domain socket /run/mt_plackup_master.sock (localhost) failed
[Tue Jan 18 21:16:32.738781 2022] [proxy_http:error] [pid 864514:tid 139775709259520] [client ::1:50532] AH01114: HTTP: failed to make connection to backend: httpd-UDS
这是 Rocky Linux 上的 Apache 2.4.37。
更新:按照要求
# ls -Z /run/mt_plackup_master.sock
system_u:object_r:var_run_t:s0 /run/mt_plackup_master.sock
答案1
我试过
# chcon -t httpd_sys_rw_content_t /run/mt_plackup_master.sock
并且它似乎有效。这是 Web 应用程序套接字的正确 SELinux 上下文吗?有什么建议吗?