Nginx如何实现动静分离

135 阅读2分钟

前言

什么是动态资源和静态资源?

动态资源:一般指后台资源

静态资源:一般指html,js,css,img,plugins

什么是动静分离?

将静态资源部署在 Nginx 上,当接收到请求是访问静态资源时,直接在 Nginx 配置的静态资源目录下面获取静态资源。如果是动态资源,利用 Nginx 反向代理原理,将请求转发给后台应用处理,这就是动静分离。

动静分离有什么作用?

  • api 接口服务化:动静分离之后,后端应用更为服务化,只需要通过提供 api 接口即可,可以为多个功能模块甚至是多个平台的功能使用,可以有效的节省后端人力,更便于功能维护。

  • 前后端开发并行:前后端只需要关心接口协议即可,各自的开发相互不干扰,并行开发,并行自测,可以有效的提高开发时间,也可以有效的减少联调时间。

  • 减轻后端服务器压力,提高静态资源访问速度:后端不用再将模板渲染为html返回给用户端,且静态服务器可以采用更为专业的技术提高静态资源的访问速度。

Nginx 的并发能力公式:

worker_processes * worker_connections / 4 | 2 = Nginx最终的并发能力

动态资源需要/4,静态资源需要/2.

Nginx 通过动静分离,来提升Nginx的并发能力,更快的给用户响应。

动态资源代理

使用 proxy_pass 动态代理

# 配置如下
location / {
  proxy_pass 路径;
}

静态资源代理

使用 root 静态代理

  • 先修改 docker ,添加一个数据卷,映射到 Nginx 服务器的一个目录
  • 添加了 index.html 和 1.jpg 静态资源
  • 修改配置文件
# 配置如下
location / {
  root 静态资源路径;
  index 默认访问路径下的什么资源;
  autoindex on; # 代表展示静态资源全的全部内容,以列表的形式展开。
}

项目是nginx.conf 配置文件的编写方式

worker_processes  1;		
error_log  /var/log/nginx/error.log warn;
# 以上统称为全局块, 
# worker_processes 它的数值越大,Nginx的并发能力就越强
# error_log 代表Nginx的错误日志存放的位置

events {
    worker_connections  1024;
}
# events块
# worker_connections他的数值越大,Nignx并发能力越强


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

    upstream win {
	ip_hash;
	server 192.168.200.56:8080;
	server 192.168.200.56:8081;
    }

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            root   /html;
            index  index.html index.htm;
            proxy_pass http://win/;
        }

        location ~* \.(gif|jpg|png)$ {
            root   /html/img;
        }

    }
}