web-dev-qa-db-ja.com

Apache mod_proxy、クロスドメインajax呼び出し用のProxyPassおよびProxyPassReverseの構成

私はhtml5-JavaScriptアプリ(PhoneGapを使用するモバイルデバイス用)を作成しています。 RESTサービスとやり取りする必要があります。

サービスは"http://localhost:8080/backend/mvc/"で実行中です

ワンプサーバー(Apache2)でアプリを開発しています(http://localhost/stage/)Chrome for browserを使用しています。

ajax呼び出しを実行すると、ブラウザは次のように応答します:XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

したがって、このクロスドメインのajax呼び出しの問題を回避するいくつかの方法を見つけます。

1)開始chrome chrome.exe --disable-web-security =>違いなし

2)mod_proxyを使用してApacheを構成し、トラフィックをリダイレクトします。

私はhttpd.confで有効にしました:

proxy_module
proxy_connect_module
proxy_http_module

次の内容を含む.htaccessファイルをwwwルートに配置します。

# start mod_rewrite
RewriteEngine On

ProxyRequests off
<Proxy>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass /EMBackend/ http://localhost:8080/backend/mvc/
ProxyPassReverse /EMBackend/ http://localhost:8080/backend/mvc/
RewriteRule ^/EMBackend/(.*)$ /backend/mvc/$1 [R]

すべてのサービス(Apache、phpなど)を再起動しました

エラー500になります

Apacheエラーログ:[Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here

これを解決する方法についての手がかりはありますか?

12
VDP

私は実用的な解決策を見つけました:

有効化:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

これを構成(またはApache仮想ホストを使用している場合は、目的の仮想ホスト)のメインセクションに配置します。

ProxyRequests Off
ProxyPreserveHost On

<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc
<Location /EMBackend>
    Order allow,deny
    Allow from all
</Location>

だから私はそれを.htaccessに入れることができないか、またはProxyPreserveHost Onを設定しなければならなかったと思います。 Include conf/extra/ファイルにhttpd.confを入れてhttpd-proxy.confファイルを作成し、その上にスクリプトを入れました。 Apacheを再起動すると動作します!

24
VDP

最新のApacheでは、次の方法でプロキシをオンにします。

a2enmod proxy;
a2enmod proxy_http
2
Kevin

プロキシモジュールを有効にした後、httpd.confに特定の行を追加するだけで済みます。

ProxyPreserveHost On
ProxyPass /EMBackend http://localhost:8080/backend/mvc
ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc

サーバーを再起動するだけで完了です。

2
Mohammad Arif