Как настроить 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