使用该答案:如何将端口 80 上的流量重定向到 Tomcat 端口 8080,同时仍允许服务器在端口 80 上发送/接收
我已将我的 apache2 服务器配置为将一些请求重定向到 8080 上的 glassfish:
<VirtualHost *:80>
(...)
ProxyPass /tomcat/ http://localhost:8080/
ProxyPassReverse /tomcat/ http://localhost:8080/
ProxyPass /tomcat-admin/ http://localhost:4848/
ProxyPassReverse /tomcat-admin/ http://localhost:4848/
</VirtualHost>
在http://my.server.org/tomcat/,我可以清楚地看到:
GlassFish Server 3.1.2
Your server is now running
但http://my.server.org/tomcat-admin/返回空白的屏幕,但我可以看到管理页面的 HTML 源代码,所以我猜想有些资源无法加载。我该如何解决这个问题?
另一个问题:如果我的 java web 应用程序使用http安全,我应该补充一下:
ProxyPass /tomcat-secure/ http://localhost:8443/
ProxyPassReverse /tomcat-secure/ http://localhost:8443/
</VirtualHost>
?
答案1
不幸的是,我对 apache-proxy 一无所知。不过,我遇到了类似的问题,我的解决方法可能有助于您解决问题。
我使用 将 tomcat 完全集成到 apache 中mod-jk
。假设您使用的是基于 Debian 的发行版,只需libapache2-mod-jk
在 中安装和配置模块/etc/libapache2-mod-jk/workers.properties
即可。您可能需要类似以下内容:
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
这些参数定义了 apache 和 tomcat 之间的连接。我告诉 tomcat 只监听127.0.0.1
。但如果您需要一个独立的 tomcat 安装(无需 apache),那么将模块配置为与另一个 IP 和/或不同的端口通信应该没问题。
下一步:打开/etc/apache2/mods-available/jk.conf
并确保 apache 读取这些属性:
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
如果完成这些,apache 和 tomcat 之间的通信应该可以正常工作。现在您可以创建一些主机将其请求转发到 tomcat:
<VirtualHost *:80>
[...]
ServerName your.host.tld
[...]
RewriteEngine on
RewriteRule ^/(.*)$ /YourContext/$1 [L,PT]
JkMount /* ajp13_worker
[...]
</VirtualHost>
YourContext
此虚拟主机将每个请求转发到tomcat 的上下文。ajp13_worker
是之前在中配置的 worker 定义/etc/libapache2-mod-jk/workers.properties
(当然,您可以为不同的 IP/端口配置多个 worker),并且RewriteRule
重写查询以在其前面加上前缀YourContext
。因此,如果尚未启用重写模块,您还需要重写模块。启用模块和此主机:
a2enmod jk
a2enmod rewrite
a2ensite 007-what-ever-host
service apache2 restart
service tomcat7 restart
并执行http://your.host.tld/abc?some=query
。希望您最终得到的结果与调用 时的结果相同http://your.host.tld:8080/YourContext/abc?some=query
。
希望有帮助;-)