Наше веб-приложение на 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 "%r" %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>