web-dev-qa-db-ja.com

プロキシと場所を使用したApache構成

これらのドメインをこれらのポートにマップしたいと思います。どうすればいいですか?

http://test1.example.com/phpmyadmin/    example.com:80/phpmyadmin/
http://test1.example.com/app1/          example.com:8080/app1/
http://test1.example.com/app2/          example.com:8090/app2/

http://webmin.example.com/              example.com:10000/

これが私がしたことです。問題は、phpmyadminが機能していないことです。 glassfishに転送されます。

webminは別のドメインであるため、機能しています。

phpmyadminを同じドメインにマッピングするにはどうすればよいですか? http://test1.example.com/phpmyadmin/

<VirtualHost *:80>
    ServerName              test1.example.com
    ProxyRequests           Off
    ProxyPreserveHost       On

    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass           /           http://localhost:8080/
    ProxyPassReverse    /           http://localhost:8080/

    ProxyPass           /admin/     https://localhost:4848/
    ProxyPassReverse    /admin/     https://localhost:4848/
</VirtualHost>

<VirtualHost *:80>
    ServerName      test1.example.com/phpmyadmin/
    DocumentRoot    /usr/share/phpmyadmin

    Alias           /phpmyadmin     /usr/share/phpmyadmin
    Alias           /mysql          /usr/share/phpmyadmin
</VirtualHost>

<VirtualHost *:80>
    ServerName              webmin.example.com
    ProxyRequests           Off
    ProxyPreserveHost       On

    <Proxy *>
      Order deny,allow
      Allow from all
    </Proxy>

    ProxyPass           /               http://localhost:10000/
    ProxyPassReverse    /               http://localhost:10000/
</VirtualHost>
2
ahmet

新しい場所を一番上のVirtualHostブロック内に配置します。

<VirtualHost *:80>
    ServerName              test1.example.com
    ProxyRequests           Off
    ProxyPreserveHost       On

    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>

    ProxyPass           /           http://localhost:8080/
    ProxyPassReverse    /           http://localhost:8080/

    ProxyPass           /admin/     https://localhost:4848/
    ProxyPassReverse    /admin/     https://localhost:4848/

    ProxyPass           /phpmyadmin/     https://localhost:80/phpmyadmin/
    ProxyPassReverse    /phpmyadmin/     https://localhost:80/phpmyadmin/

    ProxyPass           /app1/     https://localhost:8080/app1/
    ProxyPassReverse    /app1/     https://localhost:8080/app1/

    ProxyPass           /app2/     https://localhost:8090/app2/
    ProxyPassReverse    /app2/     https://localhost:8090/app2/
</VirtualHost>
2
Josh Jolly

@ josh-jollyが示唆しているように、さまざまなプロキシステートメントを単一のVHostに配置すると、構成に複数のVHostがあり、すべてがポート80で絶対にすべてをリッスンしている場合に役立ちます。

複雑さの基本的な順序

ただし、Joshの推奨事項が伝えていない(そして彼の例では誤って説明している)のは、mod_rewriteと同様に、mod_proxyが提供されたパターンを受信した順序で処理することです。

これが意味するのは、他のProxyPass/ProxyPassReverseブロックの前に次の行を配置すると、すべてのトラフィックがこのパターンによって捕捉されるということです。

ProxyPass           /           http://localhost:8080/
ProxyPassReverse    /           http://localhost:8080/

これが、PHPMyAdminに送信される目的のトラフィックではなく、すべてのトラフィックがGlassfishに送信されていた理由である可能性があります。

複雑さのネストされた順序

同様に、別の方法でルーティングしたいがネストされているURLパターンの複雑さの規則の順序に注意する必要があります。

次の例は、複雑さのルールセットの巧妙に作成されていない順序を示しています。

ProxyPass           /myapp          http://localhost:9090/
ProxyPassReverse    /myapp          http://localhost:9090/

ProxyPass           /myapp/images   http://localhost:8080/
ProxyPassReverse    /myapp/images   http://localhost:8080/

この例では、両方のURLが/myappに接続しているため、すべてのトラフィックが9090ポートに流れますが、mod_proxyは/myapp/imagesパターンに到達する前に、より基本的なパターンに一致します。

次のようにブロックを並べ替えると、URLパターンの複雑さが低下するため、両方のパターンを適切に一致させることができます。

ProxyPass           /myapp/images   http://localhost:8080/
ProxyPassReverse    /myapp/images   http://localhost:8080/

ProxyPass           /myapp          http://localhost:9090/
ProxyPassReverse    /myapp          http://localhost:9090/

良い習慣

  1. VHost構成にコメントを含めます。あなたは常にそれらを更新または管理する人になるとは限りません。
  2. ProxyPassとProxyPassReverseは常に一致する必要があります。 2つのディレクティブが異なるはずの有効な使用法を見つけたことがありません。これは、URLパターンに末尾のスラッシュを含めるか含めない場合に特に当てはまります。
  3. 関連するディレクティブをグループ化し、ある種のコメントブロックで視覚的に分離します。これは、大規模または複雑なVHost構成で特に役立ちます。しかし、習慣としての練習があなたの人生をはるかに楽にするとき。
1
Chris Giddings