首页 > 解决方案 > Nginx + Tomcat 在同一台服务器上工作

问题描述

我正在使用 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 标头,所以我不知道代理缓存是否运行良好
  2. 如果我评论整个location ~* \.(jpg|jpeg|png|gif|ico|css|js|xml|gz)$部分,我可以看到 HIT/MISS 标头,所以我认为代理缓存有效,但我不知道我是否让 Tomcat 管理静态内容,这就是我想避免使用的部分

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

谢谢。

标签: tomcatnginxproxyreverse-proxynginx-reverse-proxy

解决方案


拥有add_header X-Proxy-Cache $upstream_cache_status;NGINX 配置意味着 NGINX 会查看expires来自 Tomcat 的资产并适当地缓存它们。

附加location

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

结合

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

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


推荐阅读