tomcat - 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 加载资源。
我发现的问题是:
- 如果我使用这种配置,我认为看不到 HIT/MISS 标头,所以我不知道代理缓存是否运行良好。
- 如果我评论整个
location ~* \.(jpg|jpeg|png|gif|ico|css|js|xml|gz)$
部分,我可以看到 HIT/MISS 标头,所以我认为代理缓存有效,但我不知道我是否让 Tomcat 管理静态内容,这就是我想避免使用的部分
如何将配置文件设置为使用代理缓存并让 NGINX 管理静态内容(jpg、css、js、...)?也许一切都很好,我已经很好了......哪个是最好的解决方案?
谢谢。
解决方案
拥有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/;
将从磁盘而不是代理服务器为它们提供服务,从而无需访问代理缓存。
推荐阅读
- java - 数组中的 Java 计数出现次数
- google-api - 现在是否可以使用来自 Rust 的 gRPC Google API?
- angular - 如何在有角度的反应形式控制中允许不安全的内容(避免警告:清理 HTML 删除了一些内容)
- ios - Sirikit 与 Flutter 的集成
- datepicker - DatePicker 的问题 - RSelenium
- mysql - 在 2 个表中选择员工及其经理
- ubuntu - 如何完全禁用 GNOME 锁屏?
- php - mysqli_stmt_prepare 失败,但文件已上传到 phpmyadmin
- python - 带有 BeautifulSoup 的 Postgresql 插入数据
- c# - Autofac:如何传递参数以在剃须刀页面中注册