2017-09-04 10 views
5

80のすべてのApacheリクエストを8080のtomcatにリダイレクトする必要があります(1つのパスを除く)。Apache ProxyPassエラー

したがって、http://example.com/anything - > tomcat:8080を受信した場合。

ただし、URLが次の場合:http://example.com/site - > apacheが処理され、リダイレクトは必要ありません。

現在、という名前のフォルダが/var/www/html/にあります。

これは私の現在の設定ファイルです:私はこれを考える(このファイルは唯一、以下が含まれており、conf.dフォルダ内にある)

<LocationMatch "/*"> 
     Allow from all 
     ProxyPass    /site ! 
     ProxyPass    http://127.0.0.1:8080 
     ProxyPassReverse  http://127.0.0.1:8080 
</LocationMatch> 

site.conf

Apacheで達成するのは簡単なことですが、私が見つけたすべてのものを試しましたが、まだエラーが出ています:

ProxyPass|ProxyPassMatch can not have a path when defined in a location. 

ルートWebサイトはtomcatで実行されていますが、もう1つはApache(この質問でサイトと呼ばれるもの)で実行されています。

誰かが助けることができれば、私は感謝します。

ありがとうございます!

アップデート1 - 2017年9月6日

私はLocationMatchを削除し、.confファイルに直接ProxyPass を置けば、それは仕事を得る:私は希望、

ProxyPass    /site ! 
ProxyPassReverse  /site ! 
ProxyPass    /http://127.0.0.1:8080 
ProxyPassReverse  /http://127.0.0.1:8080 

しかし、知りたいのはなぜですか?この指示文をLocationMatchタグの外側に置くと、どのような影響がありますか?そして、最も重要なのは、LocationMatchを使って同じ結果を達成できない理由は何ですか?

答えて

4

私はエラーがかなり明確だと思う:

ProxyPass|ProxyPassMatch can not have a path when defined in a location. 

the documentationによると、LocationまたはLocationBlockのようなコンテキストブロック内ProxyPassディレクティブはパスを許可していません:

When used inside a <Location> section, the first argument is omitted and the local directory is obtained from the <Location> . The same will occur inside a <LocationMatch> section; however, ProxyPass does not interpret the regexp as such, so it is necessary to use ProxyPassMatch in this situation instead.

あなたがしています

ProxyPass    /site ! 
を使用しているため、エラーが発生しました

あなたはこのように、複数の<Location>セクションを使用することによって理論的にはこれを解決しようとすることができます:

<Location /> 
    ProxyPass http://backend/ 
</Location> 

<Location /site> 
    ProxyPass ! 
</Location> 

ordering of these sections is important

LocationMatchブロックの外にProxyPassディレクティブを使用するソリューションは、おそらく最も簡単な解決策です。


補足として、LocationMatchディレクティブは正しくありません。 LocationMatchへの引数は正規表現であり、/*/文字のみのURLと一致します。つまり、/または//または/////////などと一致します。私はあなたが本当に/.*を意味したと思います。正規表現の*は、「前の文字、0回以上」を意味します。

+0

よろしいですか。ありがとう!私はあなたのソリューションを 'Location'を使って試してみます。しかし、 'Location'を使わないことで、違いは何ですか?これらのプロキシ値を直接ファイルに設定することは、 'VirtualHost'自身または' Directory'の設定と同じですか?そのアプローチに問題はありますか? – Luiz

+0

'Location'ブロックを使って' ProxyPass'を設定するだけの場合、設定ファイルの最上位レベルで 'Location'と' ProxyPass'を使用するのとの違いがあるとは思えません。私は 'ProxyPass'だけでなく' Location'セクションでもっとやっているのかどうかは、関連する設定要素をまとめておくほうが好きかもしれないと思います。 – larsks

関連する問題