apache mod_proxy, настройка ProxyPass и ProxyPassReverse для междоменных вызовов ajax - PullRequest
12 голосов
/ 18 октября 2011

Я создаю приложение html5 - JavaScript (для мобильных устройств, используя PhoneGap).Мне нужно взаимодействовать со службой REST.

Служба теперь работает на "http://localhost:8080/backend/mvc/"

Я занимаюсь разработкой приложения на сервере wamp (apache2) (http://localhost/stage/) I 'используя браузер 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

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

Ответы [ 3 ]

24 голосов
/ 19 октября 2011

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

Включить:

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 и поместил в него скрипт выше.Перезапустил апач и все работает!

2 голосов
/ 15 сентября 2013

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

a2enmod proxy;
a2enmod proxy_http
2 голосов
/ 30 января 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...