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

我已经configurationApache Web服务器和Tomcat像这样:

我在apache2 / sites-available中创build了一个新文件,将其命名为“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(引擎标签内)

 <Host name="myDomain.com" appBase="webapps/myApp"> <Context path="" docBase="."/> </Host> <Host name="www.myDomain.com" appBase="webapps/myApp"> <Context path="" docBase="."/> </Host> 

这很好。 但我不喜欢把静态文件(HTML,图像,video等)放到{tomcat home} / webapps / myApp的子文件夹中,而我想把它们放在apache webserver的根WWW目录的子目录下。 我希望Apache Web服务器能够单独提供这些文件。

我怎么能这样做? 所以所有传入的请求将被转发到Tomcat,除了那些要求一个静态文件。

您可能想要使用ProxyPassMatch 。 你可以像这样使用它:

 ProxyPassMatch ^(/.*\.cgi)$ ajp://localhost:8009$1 

代理以.CGI结尾的所有请求。 如果您希望代理多个扩展,只需添加更多行或编辑正则expression式。 那么你只需要确保你的VirtualHost被设置为服务其余的图像types。

虽然uesp的答案在技术上是正确的,但我始终build议人们使用Apache mod_jk连接器来通过Apache托pipeJava应用程序服务器。 一般来说,它简化了一切,并允许您安装特定的上下文。 例如,您现在可以使用:

 LoadModule jk_module libexec/mod_jk.so JKMount /myapp/* ajp13 

它使得转发请求变得更容易,并且使您能够更灵活地使用Apache来托pipe其他资源。