![带有子域的 apache ajp 代理后面的 JBoss 应用程序-重复上下文](https://linux22.com/image/647843/%E5%B8%A6%E6%9C%89%E5%AD%90%E5%9F%9F%E7%9A%84%20apache%20ajp%20%E4%BB%A3%E7%90%86%E5%90%8E%E9%9D%A2%E7%9A%84%20JBoss%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F-%E9%87%8D%E5%A4%8D%E4%B8%8A%E4%B8%8B%E6%96%87.png)
在我的应用程序中,我正在制作一些标准场景,其中 Java web 应用程序部署在 JBoss 上,并预先使用 apache 代理。webapp 可以从 /esp 上下文访问,因此直接 url 是(但我已关闭 Jboss 的 HTTP,仅 AJP):
http://1.2.3.4:8080/esp
现在,我已创建子域并尝试通过 apache 根上下文进行代理移动。因此,我希望 apache 进行代理:
https://mysubdomain.domain.com -> ajp -> Jboss /esp context app
我认为我的配置遗漏了一些明显的问题,因为只有根应用程序上下文可访问,而其余的 URL 具有以 404 结尾的重复上下文。例如,请求的代理如下:
https://mysubdomain.domain.com/css/somecss.css -> ajp -> /esp/esp/css/somecss.css
Apache 配置如下:
<VirtualHost 1.2.3.4:80>
ServerName mysubdomain.domain.com
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost 1.2.3.4:443>
ServerName mysubdomain.domain.com
ProxyPass / ajp://localhost:8009/esp/
ProxyPassReverse / ajp://localhost:8009/esp/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/mantis>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/esp.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
SSLEngine on
SSLCertificateFile /var/keys/server.crt
SSLCertificateKeyFile /var/keys/server.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>
此外,当我预先添加额外的代理时,一切都正常:
ProxyPass /esp/ ajp://localhost:8009/esp/
ProxyPassReverse /esp/ ajp://localhost:8009/esp/
除了应用程序可以在两种上下文中从 apache 访问之外:/
而/esp
我只需要 root。我该如何修复它?
答案1
我已经遇到过与您类似的麻烦,最后找到了我的相关配置(适应您发布的配置):
ProxyRequests Off
ProxyPass / ajp://localhost:8009/esp/
ProxyPassReverse / http://mysubdomain.domain.com/esp/
ProxyPassReverse / https://mysubdomain.domain.com/esp/
ProxyPassReverseCookiePath "/esp" "/"
最初,我在 ProxyPassRevers 方面遇到了麻烦,在 cookie 路径方面也遇到了麻烦,甚至可能需要一个ProxyPassReverseCookieDomain
指令(就我而言,我不需要它)。