У меня есть приложение со следующей структурой:
/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, который, я думаю, отключен по умолчанию?
Если способ, которым вы это делаете, работает, не нужно его менять.