我尝试使用ProxyPass和ProxyPassReverse通过Apache将请求代理到另一个服务器实例,该另一个服务器实例绑定到Vhost所在的另一个TCP端口上的本地主机(VHost绑定到:80,目标绑定到5000时)。
但是,我在访问位置时反复接收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>
我已经testing了将备用服务器绑定到接口IP地址,并发生同样的问题。
服务器服务请求是python粘贴的一个实例:httpserver,它已经被configuration为使用/ rhodecode后缀(正如我在其他关于ProxyPass的post中看到的那样)。 项目本身的文档 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 ),然后再试一次。
事实certificate,SELinux布尔httpd_can_network_connect必须设置为1 。
对于重新启动时的持久性:
setsebool -P httpd_can_network_connect=1
一个更好的方法来解决这个(有你的蛋糕和吃它)关于SELinux是运行此命令使httpd_ttypes知道您正在使用的端口..
semanage port -a -p tcp -t http_port_t 5000
你可以关掉那个布尔值,然后继续工作。