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を使用する必要がありますか?
Apacheは、HTTPホストヘッダーに基づいてvhostsを照合します。クライアントがredmineとjenkinsのどちらにアクセスしているかに関係なく、ホスト名は同じであるため、両方とも しなければならない 同じ仮想ホストで。
現在の構成で起こっていることは、ApacheがHostヘッダーを検出するとすぐに、どのvhostを照合するかを決定していることです。 'j'はアルファベット順で 'r'の前に来るため、両方が一致していても、jenkins vhostファイルが優先されます。
<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>