代理到本地主机和其他 TCP 端口时 ProxyPass 和 ProxyPassReverse 出现问题

代理到本地主机和其他 TCP 端口时 ProxyPass 和 ProxyPassReverse 出现问题

我正在尝试使用 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>

我已经测试将备用服务器绑定到接口 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)

经过进一步研究后,我尝试将 SELinux 设置为宽容(echo 0 >/selinux/enforce),然后重试。

事实证明,SELinux 布尔值httpd_can_network_connect必须设置为1

重启后持久保存:

setsebool -P httpd_can_network_connect=1

答案1

对于 SELinux 来说,解决此问题(鱼与熊掌兼得)的一个更好的方法是运行此命令以使 httpd_t 类型知道您正在使用的端口。

semanage port -a -p tcp -t http_port_t 5000

然后您可以关闭该布尔值并仍使其工作。

相关内容