簡體   English   中英

apache mod_proxy,為跨域ajax調用配置ProxyPass和ProxyPassReverse

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

我正在創建一個html5 - JavaScript應用程序(適用於移動設備,使用PhoneGap)。 我必須與REST服務進行交互。

該服務現在在"http://localhost:8080/backend/mvc/"

我正在wamp服務器上開發我的應用程序(apache2)( http://localhost/stage/ )我正在使用Chrome瀏覽器。

當執行ajax調用時,瀏覽器會響應: XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 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

我在www根目錄中放了一個.htaccess文件,其中包含以下內容:

# 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

關於如何解決這個問題的任何線索?

我找到了一個有效的解決方

啟用:

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 我在httpd.conf文件中Include conf/extra/並創建了httpd-proxy.conf文件並將上面的腳本放入其中。 重啟apache,它正在運行!

在啟用代理模塊后,您只需在httpd.conf中添加給定的行。

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

只需重啟服務器即可完成。

在非常現代的apache中,打開代理:

a2enmod proxy;
a2enmod proxy_http

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM