我全新安装了 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 进行中继全部通过 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" />
答案2
<Proxy *>
对于您在此处的反向代理配置,不需要。此构造通常出现在指南但我担心他们完全错了。
如果你希望限制对代理资源的访问,请使用<Location>
块而不是一个<Proxy>
。因此,如果你有类似的东西
<Location "/">
Order deny,allow
Deny from all
Allow from localhost
</Location>
它会按照你的意愿运行。但请先尝试不使用它,因为它几乎肯定是导致 403 的原因。上述配置意味着只有启动的 Web 服务器的请求http://localhost
才会起作用,