Назад | Перейти на главную страницу

Настройте apache2 для обслуживания веб-приложения tomcat в домене без тайм-аутов

У меня есть домен, размещенный на неуправляемом сервере VPS с Ubuntu 16.04. Я настроил свое веб-приложение Java EE Tomcat для обслуживания на моем доменном имени. Но время отклика для приложения слишком велико, и время ожидания в браузере постепенно увеличивается. Если я остановлю службу apache2 и получу доступ к своему веб-приложению через domain: 8080, производительность веб-приложения будет идеальной. Как правильно настроить apache2 для обслуживания веб-приложения tomcat на доменном имени с хорошей производительностью? Я понимаю, что простое решение - связать все ссылки на мое веб-приложение с доменом: 8080, но я хотел бы знать, как правильно настроить apache2 для обслуживания веб-приложения Tomcat в домене с той же производительностью, что и при использовании домена: 8080 . Заранее благодарю за любую помощь.

Это мой файл, доступный для сайтов apache2 для домена:

<VirtualHost *:80>

  # Admin email, Server Name (domain name) and any aliases
  ServerAdmin webmaster@lae-laeweb.com
  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>

Это сценарий, который я использую после загрузки нового файла .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

server.xml для tomcat:

<?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>

При использовании 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 и поэкспериментируйте с более высокими значениями, чтобы увидеть, повысится ли производительность в конечном итоге. Здесь нет универсального решения.

Нашел проблему. Вы должны установить «ProxyRequests Off» в файле domain.conf в папке apache2 / sites-available. Теперь все работает нормально. Спасибо всем плакатам. Очень признателен.