调整 apache2 以在域中无超时地提供 tomcat web 应用程序

调整 apache2 以在域中无超时地提供 tomcat web 应用程序

我有一个域名,托管在装有 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 &quot;%r&quot; %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”。现在一切正常。感谢所有发帖者。非​​常感谢。

相关内容