Nginx + Tomcat 在同一台服务器上工作

Nginx + Tomcat working in the same server

我正在使用 Tomcat 开发 WebApp。我已经设置了一个前端 NGINX 服务器来提供静态内容并将其余工作重定向到 Tomcat 服务器。

我已经在 NGINX 中设置了该配置:

proxy_cache_path  /var/www/mysite/assets levels=1:2 keys_zone=my_cache:10m inactive=60m;
proxy_cache_key   "$scheme$request_method$host$request_uri";

server {
        server_name             mysite.com www.mysite.com;
        listen                  443 ssl http2;

        ssl_certificate         /etc/ssl/mysite.crt;
        ssl_certificate_key     /etc/ssl/mysite.key;
        ssl_session_cache       shared:SSL:10m;
        ssl_session_timeout     10m;

        root                    /opt/tomcat/latest/webapps/mysite/;
        index                   index.jsp;

        location ~* \.(jpg|jpeg|png|gif|ico|css|js|xml|gz)$ {
                expires 12h;
        }

        location / {
                proxy_pass              http://127.0.0.1:8080/mysite/;
                proxy_redirect          off;
                proxy_set_header        Host $host;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-Proto $scheme;
                proxy_set_header        X-Server-Proto $server_protocol;

                proxy_cache             my_cache;
                add_header              X-Proxy-Cache $upstream_cache_status;
        }
}

如您所见,我设置了代理重定向和代理缓存。使用最后一条指令 (add_header X-Proxy-Cache $upstream_cache_status;) 我可以查看 hva e HIT 或 MISS 加载资源。

我发现的问题是:

  1. 如果我使用这个配置,我认为看不到 HIT/MISS headers, 所以我不知道代理缓存是否正常工作
  2. 如果我评论整个 location ~* \.(jpg|jpeg|png|gif|ico|css|js|xml|gz)$ 部分,我可以看到 HIT/MISS headers,所以 我认为代理缓存有效 ,但我不知道我是否让 Tomcat 管理静态内容,这正是我想避免使用此部分

如何设置配置文件以使用代理缓存并让 NGINX 管理静态内容(jpg、css、js、...)? 也许一切都很好,我已经很好了...... 哪个是最好的解决方案?

谢谢。

在 NGINX 配置中包含 add_header X-Proxy-Cache $upstream_cache_status; 意味着 NGINX 查看来自 Tomcat 的那些资产上的 expires 设置并适当地缓存它们。

附加location

location ~* \.(jpg|jpeg|png|gif|ico|css|js|xml|gz)$ {
                expires 12h;
}

结合

root                    /opt/tomcat/latest/webapps/mysite/;

将从磁盘而不是代理为它们提供服务,从而无需访问代理缓存。