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 加载资源。
我发现的问题是:
- 如果我使用这个配置,我认为看不到 HIT/MISS headers,
所以我不知道代理缓存是否正常工作。
- 如果我评论整个
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/;
将从磁盘而不是代理为它们提供服务,从而无需访问代理缓存。
我正在使用 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 加载资源。
我发现的问题是:
- 如果我使用这个配置,我认为看不到 HIT/MISS headers, 所以我不知道代理缓存是否正常工作。
- 如果我评论整个
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/;
将从磁盘而不是代理为它们提供服务,从而无需访问代理缓存。