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

#javascript #ajax #apache #cross-domain

#javascript #ajax #apache #междоменный

Вопрос:

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

Есть какие-либо подсказки о том, как это решить?

Ответ №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 ввел файл, создал файл и поместил в него приведенный выше скрипт. Перезапустил 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