Nginx动静分离技术详解(原理+架构+案例)

Nginx是大型架构的基石,下面详解Nginx动静分离技术@mikechen

Nginx动静分离

Nginx 动静分离,是一种优化网站性能的常用架构模式。

其核心思想,是将网站的静态资源(如图片、CSS、JavaScript 文件)、和动态资源(如由后端程序生成的 HTML 页面)分开处理。

如下图所示:

Nginx动静分离技术详解(原理+架构+案例)-mikechen

这样,可以显著提升网站的访问速度、和并发处理能力。

 

Nginx动静分离原理

动静分离的核心:是将动态、和静态请求区分开。

整体实现,如下图所示:

Nginx动静分离技术详解(原理+架构+案例)-mikechen

静态资源由Nginx直接读取和响应,而动态请求由后端应用服务器(如Tomcat、Node.js)处理。

静态请求的 URL 通常以 .html, .css, .js, .jpg, .png, .gif 等文件扩展名结尾。

Nginx 会将这些请求匹配到静态文件目录规则,然后直接从本地文件系统读取并返回文件给客户端,而不会将请求转发给后端服务器。

动态请求,通过Nginx的反向代理(proxy_pass)转发给后台服务器。

http {
    upstream backend_servers {
        server backend1_address:port;
        server backend2_address:port;
    }

    server {
        listen 80;
        server_name example.com;

        # 静态资源配置
        location ~* \.(html|htm|css|js|gif|jpg|jpeg|bmp|png|ico|txt)$ {
            root /usr/local/nginx/static;  # 静态文件存放路径
            expires 30d;                   # 设置缓存时间,避免频繁请求
            access_log off;                # 可关闭访问日志提升性能
        }

        # 动态请求配置
        location / {
            proxy_pass http://backend_servers;  # 动态请求转发给后端服务器
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

动态请求:通常,动态请求的 URL 不包含特定的文件扩展名,或者以 .do, .jsp, .php 等结尾。

Nginx 会将这些请求匹配到代理规则,然后通过 proxy_pass 指令将请求转发给后端的应用服务器。

评论交流
    说说你的看法