插件窝 干货文章 Nginx配合Apache或Tomcat的动静分离怎么配置

Nginx配合Apache或Tomcat的动静分离怎么配置

Nginx 配置 proxy 静态 651    来源:    2025-04-21

Nginx配合Apache/Tomcat的动静分离配置指南

动静分离是提高Web应用性能的常用策略,通过让Nginx处理静态内容,Apache/Tomcat处理动态内容,可以显著提升服务器性能。以下是具体配置方法:

1. Nginx + Apache动静分离配置

1.1 基本架构

客户端 → Nginx(静态请求) → Apache(动态请求)

1.2 Nginx配置示例

server {
    listen 80;
    server_name example.com;

    # 静态资源处理
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|html|txt)$ {
        root /var/www/html;
        expires 30d;
        access_log off;
    }

    # 动态请求转发到Apache
    location / {
        proxy_pass http://127.0.0.1:8080;  # Apache监听端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

1.3 Apache配置调整

确保Apache监听与Nginx不同的端口(如8080):

Listen 8080

2. Nginx + Tomcat动静分离配置

2.1 基本架构

客户端 → Nginx(静态请求) → Tomcat(动态请求)

2.2 Nginx配置示例

server {
    listen 80;
    server_name example.com;

    # 静态资源处理
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|html|txt)$ {
        root /var/www/html;
        expires 30d;
        access_log off;
    }

    # 动态请求转发到Tomcat
    location / {
        proxy_pass http://127.0.0.1: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;

        # 可选:WebSocket支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

2.3 Tomcat配置调整

确保Tomcat的server.xml配置正确:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" 
           proxyName="example.com"
           proxyPort="80"/>

3. 高级优化配置

3.1 缓存控制

# 静态资源缓存
location ~* \.(jpg|jpeg|gif|png|css|js|ico|html|txt)$ {
    root /var/www/html;
    expires max;
    add_header Cache-Control "public";
    access_log off;
}

3.2 Gzip压缩

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;

3.3 负载均衡(多后端)

upstream backend {
    server 127.0.0.1:8080 weight=5;  # Apache/Tomcat
    server 192.168.1.100:8080;       # 其他服务器
    keepalive 32;
}

server {
    # ...其他配置...
    location / {
        proxy_pass http://backend;
        # ...其他proxy设置...
    }
}

4. 验证配置

  1. 检查Nginx配置语法:

    nginx -t
    
  2. 重启Nginx服务:

    systemctl restart nginx
    
  3. 测试静态资源是否由Nginx直接提供

  4. 测试动态请求是否被正确转发到后端服务器

5. 常见问题解决

问题1:静态资源返回404 - 检查Nginx配置中的root路径是否正确 - 确保静态文件存在于指定目录 - 检查文件权限

问题2:动态请求未被转发 - 检查proxy_pass地址是否正确 - 确认后端服务(Apache/Tomcat)正在运行 - 检查防火墙设置,确保端口可访问

问题3:CSS/JS加载但样式不生效 - 检查资源路径是否正确(相对/绝对路径) - 确保Content-Type头设置正确

通过以上配置,您可以实现高效的动静分离架构,充分发挥Nginx处理静态资源的高性能优势,同时保留Apache/Tomcat处理动态请求的能力。