Подтвердить что ты не робот

Apache mod_proxy, настройка ProxyPass & ProxyPassReverse для междоменных вызовов ajax

Я создаю приложение 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.

Итак, я нахожу несколько способов обойти эту проблему межсетевого вызова ajax:

1) начальный хром chrome.exe --disable-web-security  = > нет разницы

2) настройка apache с помощью mod_proxy для перенаправления трафика.

Я включил в 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

Любые подсказки о том, как разрешить это?

4b9b3361

Ответ 1

Я нашел рабочее решение:

Включить:

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 и поместил в него script. Перезапущен apache и он работает!

Ответ 2

Вы можете просто добавить указанные строки в httpd.conf после включения прокси-модулей.

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

Просто перезагрузите сервер, и все будет готово.

Ответ 3

В очень современном apache включите прокси:

a2enmod proxy;
a2enmod proxy_http