您的位置:

nginx动静分离配置

一、什么是动静分离

动态网站是指能够根据用户行为进行实时变化的网站,如商城中的购物车、订单等。静态网站则是指不需要和后端进行交互,内容一般不会发生太多变化的网站,如固定不变的产品展示页面。

动静分离就是将动态和静态资源分离到不同的服务器处理,这样可以提高网站的访问速度和并发处理能力。

二、为什么要做动静分离

1、降低服务器压力

动态网站需要频繁请求数据库,服务器负荷非常大,如果将静态资源和动态资源分离,则可以将静态资源交给CDN来处理,减轻服务器的负担。

2、提高网站性能

动态网站需要动态生成页面,处理时间较长,而静态资源直接返回给用户,速度更快。通过动静分离,静态资源可以通过CDN来实现更快速的访问,从而提高网站的性能。

3、减少带宽使用

由于动态资源需要与数据库进行交互,所以返回给用户的数据量较大。而静态资源可以被CDN缓存起来,当用户再次请求时可以直接从CDN获取,减少了对带宽的使用。

三、如何实现动静分离

实现动静分离需要使用nginx来配置反向代理和CDN加速。

1、配置反向代理

location / {
  proxy_pass http://backend-api;
}

其中backend-api为动态网站的后端地址,当请求 /api/* 路径时,nginx会将请求通过反向代理发送到后端服务器。

2、配置CDN缓存静态资源

location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
  expires 7d;
  add_header Cache-Control "public";
  # CDN加速地址
  proxy_pass http://static-cdn;
}

该配置会匹配所有静态资源,将这些静态资源缓存起来,并添加7天的过期时间。同时我们会通过proxy_pass将请求发往CDN加速服务器。

四、nginx动静分离配置示例

以下为一个完整的nginx动静分离配置示例。

worker_processes  1;

error_log  /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;

  sendfile        on;

  keepalive_timeout  65;

  server {
    listen       80;
    server_name  localhost;

    location / {
      proxy_pass http://backend-api;
    }

    location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
      expires 7d;
      add_header Cache-Control "public";
      proxy_pass http://static-cdn;
    }
  }
}