动静分离是Web应用优化的重要手段,通过将静态资源(如图片、CSS、JS等)和动态请求(如JSP、Servlet等)分开处理,可以显著提高服务器性能。以下是使用Nginx实现Tomcat动静分离的详细方案:
server {
listen 80;
server_name yourdomain.com;
# 静态资源处理
location ~* \.(jpg|jpeg|gif|png|ico|css|js|pdf|txt|zip|rar|swf|flv)$ {
root /path/to/static/files;
expires 30d; # 设置缓存时间
access_log off;
}
# 动态请求转发到Tomcat
location / {
proxy_pass http://tomcat_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream tomcat_server {
server 127.0.0.1:8080; # Tomcat默认端口
# 可以添加更多Tomcat实例实现负载均衡
# server 192.168.1.2:8080;
}
location ~* \.(jpg|jpeg|gif|png|ico|css|js|pdf|txt|zip|rar|swf|flv)$
:匹配静态文件扩展名root /path/to/static/files
:指定静态文件存放路径expires 30d
:设置浏览器缓存时间为30天proxy_pass http://tomcat_server
:将动态请求转发到Tomcatgzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
gzip_vary on;
location ~* \.(jpg|jpeg|gif|png|ico|css|js)$ {
root /path/to/static/files;
expires max;
add_header Cache-Control "public, no-transform";
access_log off;
etag on;
}
upstream tomcat_cluster {
server 192.168.1.101:8080 weight=5;
server 192.168.1.102:8080 weight=3;
server 192.168.1.103:8080 weight=2;
# 会话保持
ip_hash;
# 健康检查
check interval=3000 rise=2 fall=5 timeout=1000;
}
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript,application/javascript"
maxThreads="500"
minSpareThreads="25"
maxConnections="1000"
acceptCount="750"/>
在Tomcat的conf/web.xml
中,可以注释掉DefaultServlet对静态资源的处理:
<!--
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
-->
静态资源部署:
目录结构建议:
/webroot/
├── static/ # 静态资源
│ ├── css/
│ ├── js/
│ ├── images/
│ └── ...
└── app/ # 动态应用
└── WEB-INF/
自动化部署:
检查Nginx配置:
nginx -t
重启Nginx:
systemctl restart nginx
测试访问:
通过以上配置,可以实现高效的Tomcat动静分离架构,显著提升Web应用的性能和可扩展性。