9

PrimeFaces を使用してアプリケーションを構築しましたが、それを apache リバース プロキシの背後で実行したいと考えています。

私のターゲットURLは次のようになりますhttp://myserverurl.org:8080/myapplication/

このようにサブドメイン経由でアプリケーションにアクセスしたいhttp://myapplication.myserverurl.org

Apache で VirtualHost を構成しました。

<VirtualHost *:80>
    ServerName myapplication.myserverurl.org
    ProxyPass / http://myserverurl.org:8080/myapplication/
    ProxyPassReverse / http://myserverurl.org:8080/myapplication/
</VirtualHost>

それはあまりうまくいきません。JSF ページは表示されますが、CSS などは適用されていません。最初のリクエストは正しくリダイレ​​クトされていることがわかりますが、次のリクエスト (jQuery、CSS などをロードするため) は正しくリダイレ​​クトされていません。

http://myapplication.myserverurl.org/myapplication/faces/javax.faces.resource/primefaces.js?ln=primefaces彼らは、明らかに間違っているような URL にアクセスしようとします。プロキシはすでにそのパスにリダイレクトしているため、 /myapplication/パスを再び含めてはなりません。

この問題を解決するにはどうすればよいですか? これは PrimeFaces の問題ですか、それともリバース プロキシ構成の問題ですか?

4

4 に答える 4

5

AJP を使用する (または使用しない) ことは、この特定の問題の解決には関係ありません。

Primefaces は内部的にコンテキスト パス変数を使用して、CSS および Javascript リソースを含めます。AJP を使用しても、次のようになります。

/unwantedAppContext/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces

これを解決するためにできることは、別のプロキシ パスを追加して、不要なコンテキストを処理することです。これは最善の解決策ではないかもしれませんが、うまくいきます。

<VirtualHost *:80>

    ServerName myapplication.myserverurl.org

    ProxyPass /myapplication/ http://myserverurl.org:8080/myapplication/
    ProxyPassReverse /myapplication/ http://myserverurl.org:8080/myapplication/

    ProxyPass / http://myserverurl.org:8080/myapplication/
    ProxyPassReverse / http://myserverurl.org:8080/myapplication/
</VirtualHost>

パスの順序が重要です。

この問題は、icefaces フォーラム http://www.icesoft.org/JForum/posts/list/4433.page#sthash.h1qSqiYg.dpbsでも報告されました。

于 2013-04-09T20:01:12.153 に答える
0

アプリケーション サーバーによって異なる場合がありますが、原則として、プロキシには AJP を使用する必要があります。
最初のステップは、OS に応じて ajp モジュールを有効にすることです。Ubuntuはこんな感じ。

sudo a2enmod proxy proxy_ajp

ステップ 2、apache conf のプロキシ定義を次のように変更します。

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

ステップ 3 は、アプリケーション サーバーで有効にすることです。繰り返しますが、使用するものによって異なります。Tomcat には、server.xml にコメント アウトされたセクションがあります。Glassfish には、管理コンソールと asadmin コマンドにチェックボックスがあります (しかし、覚えていません)。

于 2013-01-08T12:53:21.650 に答える
0

jjhavokk の回答は機能しますが、グラフィックスの場合は request.contextPath 経由で参照する必要があります

<img src="#{request.contextPath}/resources/yourfolder/yourpng.png" />

それを webapp/resources/yourfolder/yourpng.png に配置します。私の .css ファイルでは、これは必要ありませんでした

h:outputStylesheet name="css/screen.css"

webapp/resources/css 内

于 2017-06-20T09:05:34.740 に答える