插件窝 干货文章 怎么使用nginx+tomcat实现静态和动态页面的分离

怎么使用nginx+tomcat实现静态和动态页面的分离

Nginx Tomcat 静态 配置 436    来源:    2025-04-26

使用Nginx + Tomcat实现静态与动态页面分离

方案概述

将Nginx作为前端服务器处理静态资源(HTML、CSS、JS、图片等),Tomcat作为后端应用服务器处理动态请求(JSP、Servlet等),实现动静分离,提高系统性能和可扩展性。

详细配置步骤

1. 环境准备

  • 安装Nginx
  • 安装Tomcat
  • 确保两者可以正常运行

2. Nginx配置静态资源处理

编辑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;
    }
}

3. Nginx配置动态请求转发

在同一个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;
    }
}

4. Tomcat配置调整

确保Tomcat配置不需要处理静态资源:

  • 检查conf/web.xml,确认默认servlet配置合理
  • 在应用中将静态资源引用路径改为Nginx服务的路径(如/static/而非相对路径)

5. 部署静态资源

将静态文件部署到Nginx配置中指定的目录:

/path/to/your/static/files/
├── css/
├── js/
├── images/
└── ...

6. 重启服务

# 重启Nginx
sudo nginx -s reload  # 或 sudo systemctl restart nginx

# 重启Tomcat
/path/to/tomcat/bin/shutdown.sh
/path/to/tomcat/bin/startup.sh

高级优化配置

1. 负载均衡

如果有多台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设置...
    }
}

2. 缓存控制

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
    access_log off;
}

location ~ .*\.(js|css)$ {
    expires 12h;
    access_log off;
}

3. Gzip压缩

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;

验证配置

  1. 访问静态资源URL(如http://yourdomain.com/static/style.css)应直接从Nginx返回
  2. 访问动态页面URL(如http://yourdomain.com/index.jsp)应通过Tomcat处理
  3. 检查Nginx和Tomcat日志确认请求路由正确

注意事项

  1. 确保静态资源路径在Nginx和应用程序中保持一致
  2. 更新应用程序中的资源引用路径,使用绝对路径(如/static/css/style.css)
  3. 对于开发环境,可能需要配置不同的路径规则
  4. 定期监控Nginx和Tomcat的性能指标,根据需要进行调优

这种架构可以有效减轻Tomcat负担,提高静态资源的访问速度,同时保持动态内容的处理能力。