将Nginx作为前端服务器处理静态资源(HTML、CSS、JS、图片等),Tomcat作为后端应用服务器处理动态请求(JSP、Servlet等),实现动静分离,提高系统性能和可扩展性。
编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf
或/usr/local/nginx/conf/nginx.conf
):
server {
listen 80;
server_name yourdomain.com;
# 静态资源目录
location /static/ {
root /path/to/your/static/files;
expires 30d; # 设置缓存时间
}
# 图片资源
location /images/ {
root /path/to/your/images;
expires 30d;
}
# 其他静态文件
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$ {
root /path/to/your/static/files;
expires 30d;
}
location ~ .*\.(js|css)?$ {
root /path/to/your/static/files;
expires 12h;
}
}
在同一个server块中添加Tomcat反向代理配置:
server {
# ... 前面的静态资源配置 ...
# 动态请求转发到Tomcat
location / {
proxy_pass http://localhost:8080; # Tomcat默认端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 可以针对特定路径配置转发
location /api/ {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
确保Tomcat配置不需要处理静态资源:
conf/web.xml
,确认默认servlet配置合理/static/
而非相对路径)将静态文件部署到Nginx配置中指定的目录:
/path/to/your/static/files/
├── css/
├── js/
├── images/
└── ...
# 重启Nginx
sudo nginx -s reload # 或 sudo systemctl restart nginx
# 重启Tomcat
/path/to/tomcat/bin/shutdown.sh
/path/to/tomcat/bin/startup.sh
如果有多台Tomcat服务器,可以配置Nginx负载均衡:
upstream tomcat_servers {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
location / {
proxy_pass http://tomcat_servers;
# 其他proxy设置...
}
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)$ {
expires 12h;
access_log off;
}
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
http://yourdomain.com/static/style.css
)应直接从Nginx返回http://yourdomain.com/index.jsp
)应通过Tomcat处理/static/css/style.css
)这种架构可以有效减轻Tomcat负担,提高静态资源的访问速度,同时保持动态内容的处理能力。