我将Apache2设置为Tomcat的反向代理。我在Tomcat中的server.xml具有下一个AJP配置:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
Apache的配置是:
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
SSLProxyEngine On
SSLEngine On
SSLCertificateFile /home/xxxxxx/store/f******.pem
SSLCertificateKeyFile /home/xxxxxx/p*******.pem
# Servers to proxy the connection, or
# List of application servers Usage
ProxyPass / ajp://localhost:8009/x/
ProxyPassReverse / ajp://localhost:8009/x/
ServerName localhost
</VirtualHost>
我的Web应用程序正在使用Spring Security。 目前,Apache服务页面(jsp)很好,但是没有静态资源。无法达到任何资源。 如果我使用浏览器
https://example.com/x/resources/img/logo.jpg
我看不到徽标。但是,如果我放
https://example.com:8443/x/resources/img/logo.jpg
它出现。
任何帮助都会受到欢迎。
先谢谢大家;-)
答案 0 :(得分:1)
您未按照所需方式映射URL。你有:
ProxyPass / ajp://localhost:8009/x/
这意味着/x
部分已经在URL中,并且对Apache外部隐藏。因此,如果您想从Tomcat中获得/x/resources/img/logo.jpg
,则URL将位于Apache之外的http://hostname.tld/resources/img/logo.jpg
。
如果要在路径中保留/x
,则将映射更改为
ProxyPass / ajp://localhost:8009/
以便将/x
通过。
编辑
为了清晰起见并避免发表大量评论,我将在Tomcat前面列出使用Apache的四种基本方法。
1-纯直通。在这种情况下,您的Apache配置看起来像ProxyPass / ajp://localhost:8009/
(对于HTTP代理,则为ProxyPass / http://localhost:8080/
)。 Tomcat实例获得与Apache完全相同的URL。我用它来让Apache成为SSL端点,因为它更容易且更好地记录了如何在Apache上设置SSL。通常在这种情况下,只有一台Tomcat虚拟主机。
2-URL重写(一种)。这就是您现在正在看的东西。 Apache配置看起来像ProxyPass / ajp://localhost:8009/appName/
。这使您可以“隐藏” URL的appName
部分。因此,如果外部用户请求http://hostname.tld/blah.jpg
发送到Tomcat的URL是/appName/blah.jpg
,则此设置的唯一挑战是Tomcat端上生成链接的代码(即HTML锚标记)需要请注意,请勿生成其中包含/appName
的URL。在这种情况下,可以有多个与Apache虚拟主机并行的Tomcat虚拟主机。
3-Apache提供静态资源。在这种情况下,您在Apache中的映射类似于ProxyPass /dynamic ajp://localhost:8009/appName/
。您可以通过http://hostname.tld/dynamic/index.jsp
之类的请求Tomcat资源。您需要将静态资源移动到Apache可以访问它们的地方,并在URL上使用前缀http://hostname.tld/static/picture.jpg
进行处理,这可以通过重写规则或其他Apache配置进行。
4-忘记Apache。以可以绑定端口80的用户身份运行Tomcat(在类似Unix的环境中为root),并仅提供来自Tomcat的所有服务。 SSL设置起来有些麻烦,但是可以做到,而且可以通过几种方法消除webapp上下文(在您的情况下为/x
),最简单的方法是将内容放在Tomcat的ROOT中。>
让我知道这是否有意义。