mbr*_*nyc 7 httpd selinux reverse-proxy proxypass
我正在尝试使用 ProxyPass 和 ProxyPassReverse 将请求通过 Apache 代理到另一个服务器实例,该实例在 Vhost 存在的不同 TCP 端口上绑定到本地主机(当目标绑定到:5000 时,VHost 绑定到:80)。
但是,我在访问位置时反复收到 HTTP 503。
根据ProxyPass 文档...
<VirtualHost *:80>
ServerName apacheserver.domain.local
DocumentRoot /var/www/redmine/public
ErrorLog logs/redmine_error
<Directory /var/www/redmine/public>
Allow from all
Options -MultiViews
Order allow,deny
AllowOverride all
</Directory>
</VirtualHost>
PassengerTempDir /tmp/passenger
<Location /rhodecode>
ProxyPass http://127.0.0.1:5000/rhodecode
ProxyPassReverse http://127.0.0.1:5000/rhodecode
SetEnvIf X-Url-Scheme https HTTPS=1
</Location>
Run Code Online (Sandbox Code Playgroud)
我已经测试了将备用服务器绑定到接口 IP 地址,并且出现了同样的问题。
服务器服务请求是 python paste:httpserver 的一个实例,它已被配置为使用 /rhodecode 后缀(正如我在其他关于 ProxyPass 的帖子中看到的那样)。项目本身的文档Rhodecode 报告使用了上述内容。
如果我的目标是在不同端口上提供服务的另一台服务器,则问题仍然存在。
ProxyPass 是否允许代理到不同的 TCP 端口?
[更新]
我不会删除它,以防有人遇到同样的问题。
我设置了一个 ErrorLog,在那个 ErrorLog 中报告了以下错误:
[Wed Nov 09 11:36:35 2011] [error] (13)Permission denied: proxy: HTTP: attempt to connect to 127.0.0.1:5000 (192.168.100.100) failed
[Wed Nov 09 11:36:35 2011] [error] ap_proxy_connect_backend disabling worker for (192.168.100.100)
Run Code Online (Sandbox Code Playgroud)
经过更多研究,我尝试将 SELinux 设置为 permissive ( echo 0 >/selinux/enforce),然后再试一次。
事实证明 SELinux 布尔值httpd_can_network_connect必须设置为1.
对于重启的持久性:
setsebool -P httpd_can_network_connect=1
关于 SELinux,一个更好的方法来解决这个问题(吃掉你的蛋糕)是运行这个命令让 httpd_t 类型知道你正在使用的端口。
semanage port -a -p tcp -t http_port_t 5000
Run Code Online (Sandbox Code Playgroud)
你可以关闭那个布尔值,然后仍然让它工作。
| 归档时间: |
|
| 查看次数: |
14125 次 |
| 最近记录: |