Как настроить Apache для прокси Tomcat с использованием AJP?

У меня свежая установка Fedora 23 (рабочая станция) со свежими установками Apache 2.4 и Tomcat 8.

Я пытаюсь выполнить очень простую настройку: один экземпляр Apache проксирует весь трафик для одного экземпляра Tomcat.

В апаче httpd.conf Я установил ServerName localhost, Включает файл конфигурации прокси conf.modules.d/00-proxy.conf, В этом файлеmod_proxy а также mod_proxy_ajp включены с конфигурацией

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Deny from all
    Allow from localhost
</Proxy>
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/

Насколько я понимаю, это говорит Apache пересылать все запросы тому, что прослушивает локальный порт 8009 через AJP, разрешая только запросы от localhost и сохраняя все относительно соответствующих корневых каталогов.

В Tomcat's /etc/tomcat/server.xml, Я имею

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

который, насколько я понимаю, говорит Tomcat прослушивать порт 8009 на предмет того, что отправляется через AJP. Учитывая конфигурацию Apache, это должен быть каждый запрос, который получает Apache.

Эта проблема

Доступ к localhost возвращает ошибку 403 Forbidden. Если я подключусь к Tomcat напрямую с localhost:8080, связь в порядке, и я получаю index.jsp, Журнал ошибок Apache дает

AH01630: client denied by server configuration: proxy:ajp://localhost:8009/favicon.ico

указывая, что Apache запрещает доступ к Tomcat /tomcat/webapps/ROOT/ каталог из-за конфликта разрешений. Я пытался добавить

<Directory "/var/lib/tomcat/webapps/ROOT">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

в httpd.conf, но это не изменило ошибку 403 Forbidden после перезапуска Apache.

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

Что я не понимаю?

2 ответа

<Proxy *> не требуется для конфигурации обратного прокси, такой как у вас здесь. Эта конструкция обычно встречается в руководствах в Интернете, но, боюсь, они просто ошибаются.

Если вы хотите ограничить доступ к проксируемому ресурсу, используйте <Location> блок не <Proxy> один. ТАК если у тебя было

<Location "/">
  Order deny,allow
  Deny from all
  Allow from localhost
</Location>

Если бы делал то, что вы хотите. Но попробуйте сначала без него, поскольку это почти наверняка вызывает 403. Приведенный выше конфиг будет означать, что запускаются только запросы к вашему веб-серверу. http://localhost буду работать,

Вы должны изменить свой разъем, как эти.

<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>

<Connector port="8009" URIEncoding="UTF-8" enableLookups="false" protocol="AJP/1.3" />

Вы также можете перейти по этой ссылке: https://confluence.sakaiproject.org/display/~steve.swinsburg/Fronting+Tomcat+with+Apache+via+mod_proxy_ajp

Другие вопросы по тегам