如何配置 Apache 以使用 AJP 代理 Tomcat?

如何配置 Apache 以使用 AJP 代理 Tomcat?

我全新安装了 Fedora 23(工作站),其中还全新安装了 Apache 2.4 和 Tomcat 8。

我正在尝试一个非常简单的设置:Apache 的单个实例将代理 Tomcat 的单个实例的所有流量。

在 Apache 中,httpd.conf我已设置ServerName localhost。它包括代理配置文件conf.modules.d/00-proxy.conf。在该文件中, mod_proxymod_proxy_ajp已通过配置启用

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

根据我的理解,这告诉 Apache 进行中继全部通过 AJP 向监听本地端口 8009 的任何内容发送请求,只允许来自相应根目录的请求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

/tomcat/webapps/ROOT/表示由于权限冲突,Apache 不允许访问 Tomcat 的目录。我尝试添加

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

httpd.conf,但重启Apache后并没有改变403 Forbidden错误。

这是非常常见的设置,我读过的许多指南都没有指出需要更改 Apache 的访问权限或 OS 文件系统权限。这是一次全新安装,除了这里没有提到的之外,我对安装所做的操作很少。

我不明白什么?

答案1

您应该像这样修改您的连接器。

<!-- 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

答案2

<Proxy *>对于您在此处的反向代理配置,不需要。此构造通常出现在指南但我担心他们完全错了。

如果你希望限制对代理资源的访问,请使用<Location>块而不是一个<Proxy>。因此,如果你有类似的东西

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

它会按照你的意愿运行。但请先尝试不使用它,因为它几乎肯定是导致 403 的原因。上述配置意味着只有启动的 Web 服务器的请求http://localhost才会起作用,

相关内容