我已经像这样配置了 Apache Web 服务器和 Tomcat:
我在 apache2/sites-available 中创建了一个新文件,将其命名为“myDomain”,内容如下:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName myDomain.com
ServerAlias www.myDomain.com
ProxyPass / ajp://localhost:8009
<Proxy *>
AllowOverride AuthConfig
Order allow,deny
Allow from all
Options -Indexes
</Proxy>
</VirtualHost>
启用 mod_proxy 和 myDomain
a2enmod proxy_ajp
a2ensite myDomain
编辑 Tomcat 的 server.xml (在 Engine 标签内)
<Host name="myDomain.com" appBase="webapps/myApp">
<Context path="" docBase="."/>
</Host>
<Host name="www.myDomain.com" appBase="webapps/myApp">
<Context path="" docBase="."/>
</Host>
这很好用。但我不喜欢将静态文件(html、图像、视频等)放入 {tomcat home}/webapps/myApp 的子文件夹中,而是想将它们放在 apache web 服务器的根 WWW 目录的子目录中。并且我希望 Apache web 服务器单独提供这些文件。
我该怎么做?因此,除了请求静态文件的请求外,所有传入请求都将转发到 Tomcat。
答案1
你可能想使用代理密码匹配.你可以像这样使用它:
ProxyPassMatch ^(/.*\.cgi)$ ajp://localhost:8009$1
代理所有以 .CGI 结尾的请求。如果您希望代理多个扩展名,只需添加更多行或编辑正则表达式。然后,您只需确保您的 VirtualHost 已设置为服务于其余图像类型。
答案2
虽然 uesp 的答案在技术上是正确的,但我总是建议人们使用Apache mod_jk 连接器通过 Apache 托管 Java 应用程序服务器。总的来说,它简化了一切,并且允许您挂载特定上下文。例如,您现在只需使用:
LoadModule jk_module libexec/mod_jk.so
JKMount /myapp/* ajp13
它使转发请求变得更加容易,并且还为您在使用 Apache 托管其他资源时提供了更大的灵活性。