代理到本地主机和不同 TCP 端口时的 ProxyPass 和 ProxyPassReverse 问题

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

Mat*_*Ife 5

关于 SELinux,一个更好的方法来解决这个问题(吃掉你的蛋糕)是运行这个命令让 httpd_t 类型知道你正在使用的端口。

semanage port -a -p tcp -t http_port_t 5000
Run Code Online (Sandbox Code Playgroud)

你可以关闭那个布尔值,然后仍然让它工作。

  • 谢啦。我在 [die.net 上的这个联机帮助页](http://linux.die.net/man/8/httpd_selinux) 上发现了这个布尔值。它表示:`SELinux 策略可以设置为不允许 httpd 脚本连接到网络。这将防止黑客闯入您的 httpd 服务器并攻击其他机器。如果您需要脚本才能连接,您可以将 httpd_can_network_connect 布尔值设置为 on。`我相信“不允许 httpd 脚本连接到网络”是默认策略。意思是,不管端口策略如何,这个布尔值不是也必须设置为 1 吗? (2认同)
  • 好吧,我不得不执行`setsebool -P httpd_can_network_connect=1`,只是调整端口标签并没有做到。费多拉 29. (2认同)