Apache & Tomcat: ProxyPass и ProxyPassReverse

У меня возникли проблемы с настройкой Apache и Tomcat, это сценарий:

У меня есть веб-сервер Apache, работающий и работающий нормально, я могу получить доступ к этому, просто набрав:

http://localhost

Кроме того, на этом хосте у меня работает Tomcat и работает нормально; Я создал мини-веб-приложение, файлы которого находятся в каталоге "prueba", я могу получить доступ к типу:

http://localhost:8080/prueba

(Я знаю, что Apache работает в 80-порте и Tomcat в 8080 году)

Что я хочу сделать, так это то, что через Apache пользователь может получить доступ к "pruebas" (работает на Tomcat), я имею в виду:

http://localhost/prueba

Я читал много этого, и я думаю, что есть два способа сделать это, и я решил включить прокси-модули (proxy и proxy_ajp, с a2enmod), также я прочитал, что должен отредактировать этот файл: sites-available/default, это содержимое:

NameVirtualHost *:80
<VirtualHost *:80>
     ServerName 127.0.0.1
     DocumentRoot /var/www

     ProxyRequests Off
     ProxyPreserveHost On

     ProxyPass /static/ !
     ProxyPass / ajp://localhost:8009/
     ProxyPassReverse / ajp://localhost:8009/

.
.
.
     Alias /static/ "/apache/www/"

</VirtualHost>

Но это не сработало: (

Я должен сказать, что я пробовал много изменений, на этих двух строках, например:

     ProxyPass /prueba ajp://localhost:8009/prueba
     ProxyPassReverse /prueba ajp://localhost:8009/prueba

или

     ProxyPass / ajp://localhost:8009/prueba
     ProxyPassReverse / ajp://localhost:8009/prueba

(каждый раз, когда я редактирую файл, я перезапускаю apache)

Но когда я получаю доступ к [http://localhost/prueba/], у меня есть:   Сервис временно недоступен

Кто-нибудь знает, почему? Спасибо заранее, ребята.

Pd: Я работаю с apache 2.2.17 и tomcat6.

Ответ 1

Вы должны поставить

 ProxyPass / ajp://localhost:8009/
 ProxyPassReverse / ajp://localhost:8009/

на вашем виртуальном хосте apache

Затем вам нужно раскомментировать прослушиватель ajp в tomcat

<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

Затем вам нужно настроить хост и контекстный путь в server.xml

REFF: http://www.ntu.edu.sg/home/ehchua/programming/howto/ApachePlusTomcat_HowTo.html

Надеюсь, это поможет вам.

Ответ 2

ProxyPassReverse определяет URL-адрес Apache httpd, который должен переписывать URL-адреса, чтобы перенаправить на проксированный (скрытый) URL-адрес. Из-за этого вы должны изменить строку ProxyPassReverse на следующее:

ProxyPassReverse / http://localhost/prueba

Смотрите также: http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html#usage

Ответ 3

Сервис недоступен из-за SELinux, попробуйте отключить SE Linux: setenforce 0

Ответ 4

Попробуйте следующее:

ProxyPass /prueba/ http://localhost:8009/prueba/
ProxyPassReverse /prueba/ http://localhost:8009/prueba/

а затем удалите следующий URL-адрес из браузера: http://localhost/prueba/

Примечание: обязательно добавить "/prueba/"

Ответ 5

вы можете попробовать добавить:

ProxyPreserveHost On

Из документации:

"Если этот параметр включен, этот параметр передает строку Host: от входящего запроса на прокси-сервер вместо имени хоста, указанного в строке ProxyPass.

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

Ответ 6

Вы заявили: я могу получить доступ к типу:

http://localhost: 8080/prueba

но следующее не работает:

ProxyPass/prueba/http://localhost: 8009/prueba/

8080!= 8009

убедитесь, что ваши номера портов одинаковы