Tomcat позади Nginx медленно - PullRequest
0 голосов
/ 10 июля 2019

Наше веб-приложение на tomcat годами прекрасно работало непосредственно на порте 8080 или 8443. За nginx на том же сервере оно все еще работает, но некоторые ресурсы, которые ранее извлекались за миллисекунды, берут (согласно Chrome) aминуту (точно, подозрительно), что делает его непригодным для использования.

Вот файл nginx.conf, в котором удалены несколько ненужных путей.Цель состоит в том, чтобы обрабатывать соединения на нескольких портах и ​​обрабатывать сертификаты:

events {
    worker_connections  4096;  ## Default: 1024
}
http {
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        listen 8080 default_server;
        listen [::]:8080 default_server;
        root /var/www/html;
        server_name zeblon.redangus.org;
        # Redirect non-https traffic to https
        if ($scheme != "https") {
            return 301 https://$host$request_uri;
        }
    }

    server {
        listen 443 ssl; # managed by Certbot
        listen [::]:443 ssl;
        listen 8443 ssl;
        listen [::]:8443 ssl;
        # RSA certificate
        ssl_certificate <the legitimate path>;
        ssl_certificate_key <the legitimate path>;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_session_cache shared:SSL:1m; # holds approx 4000 sessions

        location / {
            keepalive_timeout 300;
            keepalive_requests 100000;
            proxy_pass http://zeblon.redangus.org:8088/;
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

Вот файл server.xml, который использует tomcat.Это было опробовано как на tomcat 8, так и на 9 с неизменно плохими результатами.Удалите блок RemoteIpValve и измените 8088 на 8080, и это конфигурация, которая отлично работала в течение многих лет без прокси:

<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
    <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
            SSLEnabled="false"
            port="8088"
            protocol="HTTP/1.1"
            connectionTimeout="20000"
            scheme="http"
            secure="false"
            maxThreads="150"
        />

        <Connector port="8009" protocol="AJP/1.3" />

        <Engine name="Catalina" defaultHost="localhost">

            <Realm className="org.apache.catalina.realm.LockOutRealm">
                <Realm 
                    className="org.apache.catalina.realm.UserDatabaseRealm"
                    resourceName="UserDatabase"/>
            </Realm>

            <Host 
                name="localhost"  
                appBase="webapps"
                unpackWARs="true" 
                autoDeploy="true">

                <Valve 
                className="org.apache.catalina.authenticator.SingleSignOn" />

                <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" />

                <!-- This is the magic that makes this work correctly
                   behind nginx -->
                <Valve 
                    className="org.apache.catalina.valves.RemoteIpValve"
                    remoteIpHeader="x-forwarded-for"
                    remoteIpProxiesHeader="x-forwarded-by"
                    protocolHeader="x-forwarded-proto" />
           </Host>
       </Engine>
    </Service>
</Server>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...