我们的产品中有 Apache HTTPD 服务器,我需要将 AJP 代理添加到某些特定的应用程序中。
Tomcat AJP 端口为 8009,Tomcat HTTP 端口为 8080(SSL 终止在 Apache 中)。这是我需要配置的 AJP 代理。
<Directory /app>
AuthType None
Allow from all
Satisfy any
AllowOverride None
Options None FollowSymLinks
</Directory>
<Proxy http://localhost:8080/app >
AuthType None
Allow from all
Order Deny,Allow
Satisfy any
Options None FollowSymLinks
</Proxy>
ProxyPass /app ajp://localhost:8009/app
<Location /app>
ProxyPassReverse ajp://localhost:8009/app
</Location>
问题:应该配置什么<Proxy … >
?
<Proxy http://localhost:8080/app >
或
<Proxy ajp://localhost:8009/app >
添加 澄清一下。整个配置包含根配置(见下文)。
我只需要将 AJP 代理添加到某些特定的应用程序。
<Directory />
Deny from all
Allow from localhost
Order Deny,Allow
AuthType Basic
Require valid-user
AllowOverride None
Satisfy any
Options None FollowSymLinks
</Directory>
<Proxy *>
Deny from all
Order Deny,Allow
AuthType Basic
Require valid-user
Satisfy any
Options None FollowSymLinks
</Proxy>
答案1
好的,您对 Apache 配置有几个误解需要纠正。
<Directory>
块指的是绝对文件系统路径。不是 URI 路径或相对于文档根目录的路径。正如 David Hutchinson 所提到的,在代理时,您应该使用<Location>
块。<Proxy>
块(几乎)专门用于配置正向代理,不是反向的。删除这些块,你不需要它们。再次使用<Location>
块。- 不要在 内使用
ProxyPass
或。虽然这样做是有效的,但会使事情变得复杂。只需使用这些指令的两个参数版本即可。此外,除非您有理由不这样做,否则请在这两个指令中使用尾部斜杠。ProxyPassReverse
<Location>
位置块的顺序可能需要反转(我记不清正确的顺序了),但可以先从类似以下内容开始:
ProxyPass /app/ ajp://localhost:8009/app/
ProxyPassReverse /app ajp://localhost:8009/app/
<Location />
Order Allow,Deny
Allow from localhost
AuthType Basic
Require valid-user
</Location>
<Location /app/>
Allow from all
</Directory>
我已删除默认指令。
答案2
您根本不需要“<Proxy”块来完成您想要实现的目标。
ProxyPass 和 ProxyPassReverse 指令就是您所需要的。但为了便于阅读,我建议要么将两者都放在 Location 块中,要么都不放。
如果您需要为应用路径配置不同的设置,例如客户端证书身份验证,请使用您已在配置中拥有的位置(或 LocationMatch)块。
答案3
您可以使用<Proxy *>
。我认为这样会很好。