我有一个域名,托管在装有 Ubuntu 16.04 的非托管 VPS 服务器上。我已将 Java EE Tomcat Web 应用程序配置为在我的域名上提供服务。但应用程序的响应时间太慢,浏览器逐渐出现超时。如果我停止 apache2 服务并通过域:8080 访问我的 Web 应用程序,Web 应用程序的性能将非常完美。如何正确配置 apache2 以在域名上以良好的性能提供 tomcat Web 应用程序?我意识到简单的解决方案是将对我的 Web 应用程序的所有引用链接到域:8080,但我想知道如何正确配置 apache2 以在域上以与使用域:8080 相同的性能提供 Tomcat Web 应用程序。在此先感谢您的帮助。
这是我的 apache2 站点可用的域名文件:
<VirtualHost *:80>
# Admin email, Server Name (domain name) and any aliases
ServerAdmin [email protected]
ServerName lae-laeweb.com
ServerAlias www.lae-laeweb.com
# Index file and Document Root (where the public files are located)
DirectoryIndex index.html
DocumentRoot /var/www/html
# Custom log file locations
LogLevel warn
ErrorLog /var/log/apache2/error-lae-laeweb.com.log
CustomLog /var/log/apache2/access-lae-laeweb.com.log combined
#ServerName www.lae-laeweb.com
ProxyRequests On
ProxyPass / http://lae-laeweb.com:8080/LAEWeb/ keepalive=on ttl=60
ProxyPassReverse / http://lae-laeweb.com:8080/LAEWeb/
<Location />
Order allow,deny
Allow from all
</Location>
</VirtualHost>
这是我将 Web 应用程序的新 .war 文件上传到 tomcat 后使用的脚本:
#!/bin/bash
cd ../usr/local/apache-tomcat-8.5.23/bin
./shutdown.sh
./startup.sh
cd ../../../..
service apache2 reload
service apache2 restart
service=apache2
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then
echo "$service is running!!!"
else
/etc/init.d/$service restart
fi
tomcat的server.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="60000"
redirectPort="8443"
maxThreads="200" acceptCount="100" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" connectionTimeout="60000" />
<Engine name="Catalina" defaultHost="lae-laeweb.com:8080">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="lae-laeweb.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>www.lae-laeweb.com</Alias>
<Context path="" docBase="/usr/local/apache-tomcat-8.5.23/webapps/LAEWeb" debug="0" privileged="true" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false" />
</Host>
</Engine>
</Service>
</Server>
答案1
当使用 Apache 作为受网络延迟影响的代理时,您应该调整缓冲以提高性能。文档,尝试将其添加到您的虚拟主机文件中:
<VirtualHost *:80>
...
ProxyRequests On
ProxyReceiveBufferSize 512
ProxyPass / http://lae-laeweb.com:8080/LAEWeb/ keepalive=on ttl=60
ProxyPassReverse / http://lae-laeweb.com:8080/LAEWeb/
...
根据文档中的建议,请避免在缓冲区中使用低于 512 的值,并尝试使用更高的值,看看最终是否能获得更好的性能。这里没有一种适合所有情况的设置。
答案2
找到问题了。您必须在 apache2/sites-available 文件夹中的 domain.conf 文件中设置“ProxyRequests Off”。现在一切正常。感谢所有发帖者。非常感谢。