Назад | Перейти на главную страницу

Apache ProxyPass

У меня есть приложение со следующей структурой:

/application (html files)
/application/css (css files)
/application/img (images)
/application/classes -> I want this to redirect to a application server (JBoss)

Как мне настроить для этого apache?
Почему не работает, если я делаю:

ProxyPreserveHost On
ProxyPass /application !
ProxyPass /application/css !
ProxyPass /application/img !
ProxyPass /application/classes http://jboss_server:8080/
ProxyPassReverse /application/classes http://jboss_server:8080

Убедитесь, что Серверы имеют одинаковую структуру!

ProxyPass /application/classes http://jboss_server:8080/application/classes
ProxyPassReverse /application/classes http://jboss_server:8080/application/classes

Вам не нужно использовать другие значения proxypass, потому что "классы"находится под"применение"! Таким образом, прокси будет вызываться, только если вы используете /application/classes а не если вы используете /application/img.

Думаю, у вас немного неправильный синтаксис. Это должно быть:

  ProxyPass /mirror/foo/ http://foo.com/

Возможно что-то вроде этого:

ProxyPass                  /         http://sso.domain.com/
ProxyPassReverse         /           http://sso.domain.com/

Я использую для этого mod_rewrite - это дает больше возможностей.

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI}                       !^/server-info
RewriteCond %{REQUEST_URI}                       !^/server-status
RewriteRule ^/application/classes(.*)          http://jboss_server:8080/$1   [P,L,NS]

Первая строка заставит HTTPd обслуживать любой запрошенный файл, который может быть найден в DOCUMENT_ROOT, без передачи запроса на сервер приложений. У меня есть отдельный набор статических файлов, которые я развертываю на веб-серверах.

Еще две строки предотвратят проксирование страниц HTTPd server- *, и поэтому они будут обслуживаться HTTPd. Вы можете добавить больше этих исключений, чтобы их можно было обрабатывать с помощью HTTPd.

Директивы ProxyPreserveHost и ProxyPassReverse также могут быть полезны в этом контексте.

Наверное, лучше было бы реализовать протокол AJP вместо TCP через порт 8080, используя mod_proxy_ajp и следующее правило:

<Location />
    ProxyPass ajp://jboss_server:8009/
    ProxyPassReverse ajp://jboss_server:8009/
</Location>

Конечно, для этого необходимо включить протокол AJP на сервере Tomcat в JBoss, который, я думаю, отключен по умолчанию?

Если способ, которым вы это делаете, работает, не нужно его менять.