Использование Apache мод-прокси с Erlang Nitrogen - PullRequest
0 голосов
/ 26 октября 2011

У меня есть CentOS-бокс, на котором запущено несколько веб-приложений, и я использую Apache для прокси-запросов к различным приложениям.Все они работают, за исключением приложения Erlang Nitrogen, которое я не могу заставить работать.

Я запускаю приложение Nitrogen стандартным способом, и к нему можно получить доступ локально на машине на http://localhost:8000. Я подтвердил это с помощью wget.

Вот файл конфигурации apache, который я пытаюсь использовать:

ProxyRequests Off
ProxyPreserveHost On

<Proxy http://my-ip:8000/*>
  Order deny,allow
  Allow from all
</Proxy>

ProxyPass /erlang http://my-ip:8000/
ProxyPassReverse /erlang http://my-ip:8000/
ProxyPassReverse  /erlang  http://my-ip/

Эта настройка аналогична всем другим успешно работающим прокси в системе.за исключением того, что другие приложения не развернуты в корневом каталоге своего сервера, как это делает Nitrogen.

В результате базовая страница загружается правильно в веб-браузер, а все сопутствующие ресурсы - нет.Это дает мне не стилевую страницу, где javascript не работает правильно.

Вот журнал от Apache:

x.x.x.x - - [timestamp] "GET /erlang HTTP/1.1" 200 2884
x.x.x.x - - [timestamp] "GET /nitrogen/jquery.js HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/jquery-ui.js HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/livevalidation.js HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/nitrogen.js HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/bert.js HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/jquery-ui/jquery.ui.all.css HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /nitrogen/nitrogen.css HTTP/1.1" 404 484
x.x.x.x - - [timestamp] "GET /css/style.css HTTP/1.1" 404 484

У меня есть жесткое требование использовать Apache в качестве моего прокси -Я не собираюсь перезагружать все другие приложения только для того, чтобы это приложение работало.Об открытии порта 8000 в брандмауэре также не может быть и речи.

Я открыт для использования любого модуля Apache (mod-rewrite и т. Д.) Или любого параметра Apache, если он не влияет на остальную частьПриложения.Я также могу изменить любые настройки в приложении Nitrogen, чтобы заставить его играть лучше с Apache.

Как я могу использовать Apache для прокси / обратного прокси для моего приложения Nitrogen?

Ответы [ 3 ]

1 голос
/ 20 января 2013

Проблема: я установил Yaws wiki. Это работало как http: // wiki: 8080. Но я хотел работать таким образом (используя apache): http: //wiki.local/

Решение:

Вот мои настройки apache (/ etc / apache / sites-available / wiki) для Yaws Wiki:

<VirtualHost *:80>
  ServerName wiki.local
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
  ProxyPass / http://wiki:8080/
  ProxyPassReverse / http://wiki:8080/
</VirtualHost>

Вики-настройки My Yaws (/etc/yaws/conf.avail/yaws-wiki.conf):

ebin_dir = /usr/lib/yaws/wiki/ebin
<server wiki>
 port = 8080
 listen = 0.0.0.0
 docroot = /var/lib/yaws-wiki
</server>

Мои / etc / hosts:

127.0.0.1 wiki
127.0.0.1 wiki.local

Я включил эти моды для apache:

sudo a2enmod proxy
sudo a2enmod proxy_http

Теперь http: //wiki.local/ работает безупречно.

0 голосов
/ 27 октября 2011

Проблема в том, что ProxyPass перехватывает только ссылки, поступающие в виде запросов к Apache.Что-то пошло не так, когда ссылки на html-странице указывали на ресурсы, которые не могли быть запрошены, и ProxyPass не смог их перехватить и правильно направить.Эта проблема задокументирована здесь .В частности, обратитесь к разделу «Исправление HTML-ссылок».

В итоге мне пришлось установить mod_proxy_html в Apache (для CentOS не было RPM, поэтому мне пришлось использовать apxs, как описано выше).После этого мне пришлось добавить несколько ProxyHTMLLinks для ресурсов, которые доставляли мне проблемы, и директиву ProxyHTMLURLMap, объясняющую мое отображение.

Вот мой новый файл конфигурации:

ProxyRequests Off
ProxyPreserveHost On

<Proxy http://my-ip:8000/*>
  Order deny,allow
  Allow from all
</Proxy>

ProxyPass /erlang http://my-ip:8000/
ProxyHTMLURLMap http://my-ip:8000 /erlang

ProxyHTMLLinks  link            href
ProxyHTMLLinks  script          src for

<Location /erlang>
  ProxyPassReverse http://my-ip:8000/
  SetOutputFilter proxy-html
  ProxyHTMLExtended On
  ProxyHTMLURLMap / /erlang/
  RequestHeader unset Accept-Encoding
</Location>

Что это буквальноделает, перехватывает HTML-файл и вставляет / erlang / перед всеми URL.Я вижу результат этого, когда использую функцию показа источника страницы в своем браузере.

0 голосов
/ 26 октября 2011

Вы уверены, что вашему серверу Apache разрешен доступ к этим файлам? Похоже, вы получаете HTTP 200 на первом адресе и 404 на остальных. Убедитесь, что вы указали на правильное местоположение. :)

...