127.0.0.1 のリバース プロキシはローカルでは動作しますが、ネットワーク経由では動作しません。

127.0.0.1 のリバース プロキシはローカルでは動作しますが、ネットワーク経由では動作しません。

127.0.0.1:8080 と 127.0.0.1:8081 にバインドされた 2 つの Web サーバー。Curl は、これらが期待どおりに動作することを検証します。

次のホストを持つ Apache:

Host 192.168.1.1:80

<VirtualHost 192.168.1.1:80>
  ServerAdmin [email protected]
  ProxyPass             /       http://127.0.0.1:8080/
  ProxyPassReverse      /       http://127.0.0.1:8080/
  ServerName 192.168.1.1
  ServerAlias http://192.168.1.1
</VirtualHost>

Host 192.168.1.2:80

<VirtualHost 192.168.1.2:80>
  ServerAdmin [email protected]
  ProxyPass             /       http://127.0.0.1:8081/
  ProxyPassReverse      /       http://127.0.0.1:8081/
  ServerName 192.168.1.2
  ServerAlias http://192.168.1.2
</VirtualHost>

サーバー上でホストに curl して適切な応答を受け取ることができます。(curl 192.168.1.1 を実行すると、localhost:8080 からの Web サーバー応答が返されます)

リモート ホストは 192.168.1.1 または .2 にまったく接続できません。何が足りないのでしょうか?

コメントについて

はい、デフォルトのディレクトリ ディレクティブはまだ適用されています。

# Deny access to root file system
<Directory />
        Options None
        AllowOverride None
        Order Deny,Allow
        deny from all
</Directory>

リモートで 192.168.1.1 にアクセスしようとしても、Apache ログは生成されません。ローカルから curl を実行すると生成されます。

Web サーバーを localhost にバインドするのではなく、*:8080 と *:8081 にバインドすると、192.168.1.1 と 192.168.1.2 経由でリモート ホストからアクセスできます。

編集2:

curl の詳細出力: (2 番目の Web サーバーと 127.0.0.1:portnum の場合も同様)

[user@host mingle_12_2_1]$ curl -v 192.168.1.1
* About to connect() to 192.168.1.1 port 80
*   Trying 192.168.1.1... connected
* Connected to 192.168.1.1 (192.168.1.1) port 80
> GET / HTTP/1.1
> User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
> Host: 192.168.1.1
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 16 Oct 2012 16:22:08 GMT
< Server: Jetty(6.1.19)
< Cache-Control: no-cache
< Location: http://192.168.1.1/install
< X-Runtime: 130
< Content-Type: text/html; charset=utf-8
< Content-Length: 94
< Connection: close
Closing connection #0
<html><body>You are being <a href="http://192.168.1.1/install">redirected</a>.</body></html>

リクエストローカルからのログ

192.168.1.1 - - [16/Oct/2012:12:22:08 -0400] "GET / HTTP/1.1" 302 94

リモート クライアントからの要求時に Apache アクセス ログまたはエラー ログは生成されません。

編集3

両方のホストへの curl とログは、使用される IP アドレスを除いて同一です。詳細については、セキュリティ管理者と協力してロックダウン ルールを取得してください。

答え1

proxypass の設定は完全に (仮想) URL 空間で動作するため、Location ディレクティブを介して各 vhost へのアクセスを許可する必要があります。

<VirtualHost 192.168.1.1:80>
  ServerAdmin [email protected]
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
  ServerName 192.168.1.1
  <Location />
    Order allow,deny
    Allow from All
  </Location>
</VirtualHost>

また、NameVirtualHosts を使用していない場合は削除してください。ServerName はホスト名である必要があります。スキームやポートなどはありません。ホスト名のみです。

答え2

以下を提供できますか:

  • curl 構文/出力 (verbose を使用)
  • Apacheからのログ
  • ifconfig出力
  • /etc/hosts を cat する
  • ファイアウォールルールセット
  • SELinux を有効/無効にします?

* アップデート *

また、 はと同じなので、は不要なので、 の部分ServerAliasを削除する必要があります。http://ServerNameServerAliasServerAlias

関連情報