web-dev-qa-db-ja.com

ApacheおよびTomcat:ProxyPassおよびProxyPassReverse

ApacheとTomcatの構成に問題があります。これはシナリオです。

Apache Webサーバーを実行しており、正常に動作しています。これにアクセスするには、次のように入力します。

http://localhost

また、このホストでは、Tomcatを実行して正常に動作しています。ファイルが「prueba」ディレクトリ内にあるミニWebアプリを作成しました。入力にアクセスできます。

http://localhost:8080/prueba

(Apacheは80ポートで、Tomcatは8080で実行されていることを知っています)

私がやりたいのは、ユーザーが「pruebas」(Tomcatで実行)にアクセスできるApacheを通して、つまり:

http://localhost/prueba

私はこれをたくさん読んでおり、これを行うには2つの方法があると思います。プロキシモジュール(proxyとproxy_ajp、a2enmodを有効にする)を決定し、このファイルを編集する必要があることも読みました:サイト利用可能/デフォルト、これはコンテンツです:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName 127.0.0.1
     DocumentRoot /var/www

     ProxyRequests Off
     ProxyPreserveHost On

     ProxyPass /static/ !
     ProxyPass / ajp://localhost:8009/
     ProxyPassReverse / ajp://localhost:8009/

.
.
.
     Alias /static/ "/Apache/www/"

</VirtualHost>

しかし、これは適切に機能していません:(

私はこの2行で、多くの変更を試しました:

     ProxyPass /prueba ajp://localhost:8009/prueba
     ProxyPassReverse /prueba ajp://localhost:8009/prueba

または

     ProxyPass / ajp://localhost:8009/prueba
     ProxyPassReverse / ajp://localhost:8009/prueba

(ファイルを編集するたびに、Apacheを再起動します)

しかし、[http:// localhost/prueba /]にアクセスすると、次のことができます。

誰もがその理由を知っていますか?事前に感謝します。

Pd:Apache 2.2.17とTomcat6を使用しています。

15
karlos9o

あなたは置く必要があります

 ProxyPass / ajp://localhost:8009/
 ProxyPassReverse / ajp://localhost:8009/

apache仮想ホスト上

次に、Tomcatでajpリスナーのコメントを解除する必要があります

<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

次に、server.xmlでホストとコンテキストパスを構成する必要があります

REFF: http://www.ntu.edu.sg/home/ehchua/programming/howto/ApachePlusTomcat_HowTo.html

これがあなたを助けることを願っています。

12
Dilip Rajkumar

ProxyPassReverseは、Apache httpdがURLを書き換えるURLを定義します。これにより、プロキシされた(隠された)URLにリダイレクトされます。このため、ProxyPassReverse行を次のように変更する必要があります。

ProxyPassReverse / http://localhost/prueba/

参照: http://httpd.Apache.org/docs/2.2/mod/mod_proxy_ajp.html#usage

2
Manuel Faux

これを試して:

ProxyPass /prueba/ http://localhost:8009/prueba/
ProxyPassReverse /prueba/ http://localhost:8009/prueba/

そして、ブラウザから次のURLにアクセスします。http:// localhost/prueba /

注:「/ prueba /」の追加は必須です

1

SELinuxが原因でサービスを利用できない可能性があります。SELinuxを無効にしてみてください:setenforce 0

0
Ankush Tehale

以下を追加してみてください:

ProxyPreserveHost On

ドキュメントから

「有効にすると、このオプションは、ProxyPass行で指定されたホスト名の代わりに、着信要求からHost:行をプロキシされたホストに渡します。

通常、このオプションはオフにする必要があります。元のHostヘッダーがバックエンドサーバーによって評価される必要があるプロキシ化された大量の名前ベースの仮想ホスティングなどの特別な構成で主に役立ちます。

0

あなたは述べました:私はタイピングにアクセスできます:

http:// localhost8080/ prueba

しかし、以下は機能しません:

ProxyPass/prueba/ http:// localhost8009/ prueba /

8080!= 8009

ポート番号が同じであることを確認してください

0
Mark