私は次のものおよび mod_proxy を使用して、Tomcat 上にVirtualHost
ある Java Web サービスに 'api' サブドメインのすべてのリクエストをプロキシしています。webapps/webservice
<VirtualHost *:80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /webservice http://localhost:8080
ProxPassReverse / http://localhost:8080
</VirtualHost>
問題は、「api.mydomain.com」と入力すると、「api.mydomain.com/webservice」にリダイレクトされ、「webservicewebservice」が利用できないために 404 エラーが発生することです。
何をすればいいのか誰か知っていますか?
解決: 以前にもこの解決策を試したことはありましたが、Stony の言う通りでした。私の場合の問題は、何も変更していなくても、動作させるために Tomcat を再起動する必要があったことです。Apache を複数回再起動しましたが、何も変わりませんでした。
答え1
あなたの問題を正しく理解しているか分かりませんが、webservice
URL に を含めたくない場合は、プロキシ パスを に設定してください/
。
<VirtualHost *::80>
ServerName api.mydoamin.com
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/webservice/
ProxPassReverse / http://localhost:8080/webservice/
</VirtualHost>
それとも、そのドメインで Web サービスを実行したいですか? リダイレクトは不要ですか?
答え2
いくつかのテストと多くのエラーを経て、最終的に次の解決策にたどり着きました。
私はApache仮想ホストを次のように設定しました:
<VirtualHost *:80>
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny, allow
Allow from all
</Proxy>
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ServerName api.mydomain.com
</VirtualHost>
api.mydomain.com
今では、特定のディレクトリを指定せずに、ポート 8080 上の Tomcat へのすべてのリクエストをプロキシするだけです。
次にこれを追加しました/etc/tomcat7/server.xml
:
<Host name="api.mydomain.com" appBase="webapps">
<Context path="" docBase="webservice" />
</Host>
私の Apache 仮想ホストで有効になっているため、ProxyPreserveHost
Tomcat は元のリクエストのホスト名を取得し、配信するコンテンツを自分で決定できます。
コンテンツはappBase="webapps"
、別の場所にあっても、ルート ディレクトリから配信されるようです。