SELinux是该问题的原因......
TException: 错误:TSocket:无法连接到localhost:9160(权限被拒绝[13])
为了解决此问题,您需要更改一个SELinux布尔值(这将自动持久存在于重新启动之间)。您可能还想重新启动httpd以重置代理工作进程,尽管这并不是严格要求的。
setsebool -P httpd_can_network_connect 1
或者
(13) 权限被拒绝
错误13表示文件系统权限问题。也就是说,由于错误的权限设置,Apache被拒绝访问文件或目录。一般来说,这并不意味着Apache配置文件存在问题。
为了提供文件服务,Apache必须获得操作系统授予的适当权限才能访问那些文件。特别地,httpd.conf中指定的User或Group必须能够读取所有要提供服务的文件并搜索包含这些文件的目录,以及所有父目录直到文件系统的根目录。
unix-like系统上资源的典型权限,如果它们不属于httpd.conf中指定的User或Group,则为644 -rw-r--r--常规文件和755 drwxr-x-r-x目录或CGI脚本。您可能还需要在支持这些权限的操作系统上检查扩展权限(例如SELinux权限)。
一个例子
假设您在unix-like系统上访问文件/usr/local/apache2/htdocs/foo/bar.html时收到了权限被拒绝的错误消息。
首先检查文件的现有权限:
cd /usr/local/apache2/htdocs/foo
ls -l bar.htm
如果需要,请修复它们:
chmod 644 bar.html
然后对目录和每个父目录(/usr/local/apache2/htdocs/foo,/usr/local/apache2/htdocs,/usr/local/apache2,/usr/local,/usr)执行相同的操作:
ls -la
chmod +x .
cd ..
一直重复到根目录
在一些系统上,可以使用实用工具 namei 来列出路径中每个组件的权限以帮助查找权限问题:
namei -m /usr/local/apache2/htdocs/foo/bar.html
如果所有标准权限都正确,但仍然遇到“Permission Denied”错误,则应检查扩展权限。例如,您可以使用命令 setenforce 0 关闭 SELinux 并检查问题是否解决。如果是这样,可以使用 ls -alZ 查看 SELinux 权限,并使用 chcon 来修复它们。
在极少数情况下,这可能是由其他问题引起的,比如 apache2.conf 文件中其他地方的文件权限问题。例如,WSGIScriptAlias 指令没有映射到实际文件。错误消息可能不准确地指出哪个文件无法读取。
不要将文件或目录设置为 777 模式,即使是“只是为了测试”,即使是“测试服务器”。测试服务器的目的是在安全环境中做正确的事情,而不是试图逃避错误。它只会告诉您问题是否出现在实际存在的文件中。