web-dev-qa-db-ja.com

localhostおよび別のTCPポートにプロキシする場合のProxyPassおよびProxyPassReverseの問題

ProxyPassとProxyPassReverseを使用して、Apache経由で、別のTCP Vhostが存在するポート(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>

代替サーバーのインターフェースIPアドレスへのバインドをテストしましたが、同じ問題が発生します。

サーバーサービス要求は、python paste:httpserverのインスタンスであり、/ rhodecodeサフィックスを使用するように構成されています(これは、ProxyPassに関する他の投稿で言及されているようです)。 プロジェクト自体のドキュメント 、Rhodecode、上記を使用することを報告します。

別のポートでサービスを提供している別のサーバーをターゲットにした場合、問題は解決しません。

ProxyPassは別のTCPポートへのプロキシを許可しますか?

[update]

誰かが同じ問題に遭遇した場合に備えて、私はこれを削除しません。

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をpermissive(echo 0 >/selinux/enforce)に設定して、再試行しました。

SELinuxブール値httpd_can_network_connect1に設定する必要があることがわかりました。

再起動時の持続性:

setsebool -P httpd_can_network_connect=1

7
mbrownnyc

SELinuxに関してこれを修正する(ケーキを食べて食べる)より良い方法は、このコマンドを実行してhttpd_tタイプに使用しているポートを認識させることです。

semanage port -a -p tcp -t http_port_t 5000

その後、そのブール値をオフにしても、機能させることができます。

5
Matthew Ife