apache mod_proxy, configuring ProxyPass & ProxyPassReverse for cross-domain ajax calls

偶尔善良 提交于 2019-12-17 23:48:49

问题


I'm creating an html5 - JavaScript app (for mobile devices, using PhoneGap). I have to interact with a REST service.

The service is now running on "http://localhost:8080/backend/mvc/"

I'm developing my app on an wamp server (apache2) (http://localhost/stage/) I'm using Chrome for browser.

when preforming an ajax call the browser responds: XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

So I find several ways to circumvent this cross-domain ajax call problem:

1) starting chrome chrome.exe --disable-web-security => no difference

2) configuring apache using mod_proxy to redirect the traffic.

I enabled in the httpd.conf:

proxy_module
proxy_connect_module
proxy_http_module

I put a .htaccess file in the www root with the following content:

# 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]

I restarted all services (apache,php,..)

resulting in error 500

apache error log: [Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here

Any clues on how to resolve this?


回答1:


I found a working solution:

Enable:

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

Put this in the main section of your configuration (or desired virtual host, if using Apache virtual hosts):

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>

So I guess I can't put it in .htaccess or I had to set ProxyPreserveHost On. I put Include conf/extra/ in the httpd.conf file and created the httpd-proxy.conf file and put the script above in it. Restarted apache and it's working!




回答2:


You could simply add the given lines in the httpd.conf after enabling the proxy modules.

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

Just restart the server and you are done.




回答3:


In very modern apache, turn on proxy by:

a2enmod proxy;
a2enmod proxy_http


来源:https://stackoverflow.com/questions/7807600/apache-mod-proxy-configuring-proxypass-proxypassreverse-for-cross-domain-ajax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!