причал через апач mod_proxy - PullRequest
       18

причал через апач mod_proxy

3 голосов
/ 26 августа 2010

Используя Apache virtualhost и mod_proxy, я хочу получить доступ к java-приложению (myapp), доступному в экземпляре Jetty на порту 8080.

С ProxyPass / localhost:8080/ в конфигурации apache virtualhost я могу получить доступ к приложению, запущенному вс помощью www.mydomain.com/myapp, но я хочу, чтобы к приложению обращались с сайта www.mydomain.com.

Попытка с помощью ProxyPass / localhost:8080/myapp Приложение не может быть найдено, поскольку запрос становится www.mydomain.com/myappmyapp /.

Затем попытался:

<Location />
        ProxyPass localhost:8080/myapp/
        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1
</Location>

Я могу получить доступ к приложению, но только для первого запроса.Последующие запросы становятся www.mydomain.com/myappmyapp/

После прочтения много раз wiki.eclipse.org/Jetty/Tutorial/Apache и документы apache mod_proxy - единственный способ, которым мне удалось правильно использовать приложение с www.mydomain.com имеет следующую конфигурацию:

<Location /myapp/>
        ProxyPass localhost:8080/myapp/
        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1
</Location>

<Location />
        ProxyPass localhost:8080/myapp/
        SetEnv force-proxy-request-1.0 1
        SetEnv proxy-nokeepalive 1
</Location>

, поэтому запрос перенаправляется в приложение Jetty в обоих случаях.

Я новичок в Apache и Jetty, и я уверен, чтоСуществует лучший и более элегантный способ достижения того же результата.На самом деле apache жалуется, говоря:

[warn] worker localhost:8080/myapp/ already used by another worker

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Проблема заключается в том, что при развертывании вашего приложения с помощью контекстного пути / myapp оно генерирует все ссылки соответствующим образом. Apache mod_proxy выполняет всю перезапись на уровне HTTP (заголовки) и не будет ничего делать с телом ответа, сохраняя его таким, как есть.

Если вы не возражаете против использования / myapp, вы можете включить mod_rewrite и включить в блок Location следующие две строки:

RewriteEngine on
RewriteRule ^/myapp/(.*)$ /$1 [P]

Если вы хотите навсегда избавиться от / myapp, тогда остается единственный вариант (при условии, что вы не хотите тратить впустую мощность ЦП на mod_proxy_html), это конфигурировать виртуальные хосты и развертывать приложения на виртуальных хостах с контекстным путем из /.

0 голосов
/ 27 августа 2010

Да, это работает от корня молы, но я хотел бы, чтобы было запущено более одного приложения.Конфигурация для myapp находится в папке контекстов Jetty:

<Configure class="org.mortbay.jetty.webapp.WebAppContext">
  <Set name="contextPath">/mvc-showcase</Set>
  <Set name="war"><SystemProperty name="jetty.home"/>/webapps/mvc-showcase.war</Set>
</Configure>

моя версия Jetty 6.1.22

0 голосов
/ 26 августа 2010

Если вы хотите, чтобы ваше веб-приложение было доступно в корне вашего сайта, вам нужно развернуть веб-приложение в корне контейнера. Обычно это делается путем вызова файла war ROOT.war вместо myapp.war (хотя это в конечном итоге зависит от конфигурации вашего развертывания Jetty, которая может быть более сложной, чем настройка по умолчанию).

...