web-dev-qa-db-ja.com

Apache mod_proxy:複数の仮想ホストがお互いを無効にする

Redmine がスタンドアロンのApache(/ opt/redmineの下にあるすべて)にすでにインストールされているUbuntu 12.04サーバーがあります。既存の設定をあまり変更せずに、同じシステムにJenkinsのインスタンスをインストールしたいと思っていました。 2つのサービスにそれぞれsub.domain.com/redmineとsub.domain.com/jenkinsでアクセスできるようにしたい。

Redmines Apacheを80ではなくポート8081でリッスンするように変更し、apt経由で追加のApacheをインストールして、「/ redmine」をlocalhost:8081/redmineにプロキシする仮想ホストをセットアップしました。これまでのところすべてがうまくいきました。 Redmineは以前と同様にアクセスできました。ただし、Jenkinsを同じ方法でセットアップし、Tomcatがポート8080、URL接頭辞「jenkins」、および新しい仮想ホストをリッスンすると、Redmineが機能しなくなります。つまり、404が返されます。Jenkins仮想ホストを削除すると、Redmineが機能します再び。

/ etc/Apache2/sites-availableにある2つのファイルは、a2ensite/a2dissiteを介して有効/無効にします。

Redmine:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName sub.domain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPreserveHost off
    ProxyPass /redmine http://localhost:8081/redmine
    ProxyPassReverse /redmine http://localhost:8081/redmine
</VirtualHost>

ジェンキンス:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName sub.domain.com
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPreserveHost off
    ProxyPass /jenkins http://localhost:8080/jenkins
    ProxyPassReverse /jenkins http://localhost:8080/jenkins
</VirtualHost>

これらのファイルの一方または両方に問題があると思います。単一の仮想ホストのみを想定したJenkinsチュートリアルからそれらをコピーしました。複数のホストのmod_proxyソリューションを探す場合はどこでも、異なるポートに異なるドメインに、つまり異なるServerNameでマップする例を見つけます。しかし、それは私が望んでいることではありません。 RewriteEngineを使用する必要がありますか?

6
Max Hohenegger

両方を処理するには、単一の仮想ホストを使用する必要があります!

Apacheは、HTTPホストヘッダーに基づいてvhostsを照合します。クライアントがredmineとjenkinsのどちらにアクセスしているかに関係なく、ホスト名は同じであるため、両方とも しなければならない 同じ仮想ホストで。

現在の構成で起こっていることは、ApacheがHostヘッダーを検出するとすぐに、どのvhostを照合するかを決定していることです。 'j'はアルファベット順で 'r'の前に来るため、両方が一致していても、jenkins vhostファイルが優先されます。

リクエストURIに基づいて照合し、それに応じてプロキシしようとしています。

<Proxy>ディレクティブにはすでにこの機能が組み込まれています!

単一の仮想ホストで次のようなものを使用して、目的を達成できます。

<VirtualHost *:80>
ServerAdmin [email protected]
ServerName sub.domain.com
ProxyRequests Off

<Proxy http://sub.domain.com/jenkins>

    Order deny,allow
    Allow from all

    ProxyPreserveHost off
    ProxyPass http://localhost:8080/jenkins
    ProxyPassReverse http://localhost:8080/jenkins

</Proxy>
<Proxy http://sub.domain.com/redmine>

    Order deny,allow
    Allow from all

    ProxyPreserveHost off
    ProxyPass http://localhost:8081/redmine
    ProxyPassReverse http://localhost:8081/redmine

</Proxy>

</VirtualHost>
3
Joe Sniderman