在tomcat 6中,我有一个运行openbluedragon的servlet,所有内容都编译并提供服务器,除了图像,它们确实显着滞后。有关图像服务的任何建议优化吗?
这是我的server.xml:
<Service name="Catalina">
<Connector port="8009" protocol="AJP/1.3" />
<Connector port="8080" maxThreads="100" protocol="HTTP/1.1" connectionTimeout="20000" />
<Engine name="Standalone" defaultHost="hostname.whatever" jvmRoute="ajp13">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="hostname.whatever" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
...context
</Host>
</Engine>
</Service>
答案 0 :(得分:4)
另一种选择是使用apache作为前端,将tomcat与mod_jk连接起来。这样你就可以让apache提供静态内容(例如图像,css,javascript),让tomcat生成动态内容。可能需要做一些工作来将静态内容与动态内容分开,但对我来说效果很好。
在Unix上,将apache作为前端是一个不错的选择,因为绑定到端口80,你经常被迫以root身份运行。 Apache知道如何在绑定端口后删除root权限,而Tomcat则不知道。您不希望面向公众的服务器以root用户身份运行。
(这类似于反向代理答案,但不涉及代理但是mod_jk)
答案 1 :(得分:4)
你一遍又一遍地提供同一套图像吗?在这种情况下,添加一个添加合理的Expires头的servlet过滤器可能会为tomcat节省大量的工作。它不会增加所服务图像的速度,但只会使其必须处理的请求数量减少。网上有很多例子。
答案 2 :(得分:3)
如果您有此选项,则可以在申请之前添加反向代理。在工作中,我有一个Apache Web服务器,它接收所有入站HTTP连接。根据URL,它将请求转发到另一个服务器或提供内容本身。我已经使用这种方法来加速为Trac网站提供静态内容。 ProxyPass和ProxyPassReverse指令是一个很好的地方,如果你想走这条路线就开始寻找。
作为一个简单的例子,如果你有一个名为/ images的虚拟目录,Apache可以提供对该目录中某些内容的任何请求,并将其他所有内容转发给你的Tomcat实例。语法非常全面。如果对于识别静态内容的方式有任何方法,这是一种可行的方法。
Apache不是这里的唯一选择。我认为所有现代Web服务器都包含类似的功能。如果我今天开始,我可能会看看LigHTTPd,只是因为它做得更少。
甚至可能会有缓存反向代理,它会自动为您解决这个问题。我不熟悉他们中的任何一个。