使用 Apache Web 服务器和 Tomcat 提供静态内容

使用 Apache Web 服务器和 Tomcat 提供静态内容

我已经像这样配置了 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 托管其他资源时提供了更大的灵活性。

相关内容