У меня есть свежая установка Fedora 23 (рабочая станция) со свежими установками Apache 2.4 и Tomcat 8.
Я пытаюсь выполнить очень простую настройку: один экземпляр Apache будет проксировать весь трафик для одного экземпляра Tomcat.
В Apache 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 /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 или разрешений файловой системы ОС. Это чистая установка, и я сделал очень мало с установкой, о которой не упомянул здесь.
Что я не понимаю?
В <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