nginx
1、nginx 简介
- 是什么?
- 一个高性能的 web 服务器,开源免费
- 作用:
- 静态资源服务器
- 反向代理
- 负载均衡
- Gzip 压缩
2、正向代理和反向代理
- 正向代理:隐藏客户端,由代理服务器接收所有客户端的请求,在发送给服务器。服务器并不知道请求是从哪个客户端发送的
- 如:www
- 反向代理:隐藏服务器,由代理服务器将所有服务器集合在一起,客户端发送请求时并不知道请求哪个服务器,只访问代理服务器,由代理服务器将服务器资源取出然后响应给客户端。
- 如:解决跨域
3、nginx 常用指令
- 查看 Nginx 的版本号:nginx -V
- 启动 Nginx:nginx
- 快速停止或关闭 Nginx:nginx -s stop
- 正常停止或关闭 Nginx:nginx -s quit
- 配置文件修改重装载命令:nginx -s reload
- 注意:以上指令都需要来到 nginx 目录下
4、静态资源服务器
-
作用:部署任意静态资源
- 例如:博客、网站等
-
实战:部署前端打包生成的文件(前端网站)
-
nginx 配置
server {
listen 80; # nginx 开启的服务器端口号
server_name localhost; # nginx 开启的服务器域名
# 所以nginx服务器访问地址就是 http://localhost 或 http://localhost:80
# 处理访问 nginx 服务器的 / 的请求
location / {
root 本地磁盘打包生成的dist文件夹路径; # 实际访问的地址是本地磁盘打包生成的dist文件夹路径
}
}
5、反向代理
-
作用:利用反向代理解决跨域问题。
-
实战:解决项目上线时的跨域问题
-
nginx 配置
server {
listen 80;
server_name localhost;
location / {
root 本地磁盘打包生成的dist文件夹路径;
}
# 处理访问 nginx 服务器的 /prod-api 开头的请求, 转发到目标服务器去
location /prod-api {
proxy_pass http://182.00.00.000/; # 转发的目标服务器地址
rewrite ^/prod-api/(.*) /$1 break; # 重写路径 以^/prod-api/xxx开头的重写为/xxx
}
}
6、动静分离
-
概念:把动态请求和静态请求分开,不是讲动态页面和静态页面物理分离,可以理解为 Nginx 处理静态页面,Tomcat 处理动态页面。
- 例如:访问 html/js/css 这种打包生成的静态资源由 Nginx 服务器处理,如果请求 sku / spu 等动态数据由 Tomcat 服务器处理
-
实际上已经配置好了,前面我们配置完成后就是动静分离了~
-
nginx 配置
server {
listen 80;
server_name localhost;
# 静态资源访问地址
location / {
root 本地磁盘打包生成的dist文件夹路径;
}
# 动态资源的访问地址
location /prod-api {
proxy_pass http://182.00.00.000/;
rewrite ^/prod-api/(.*) /$1 break;
}
}
7、Gzip 压缩
-
作用:提高传输效率,节约带宽
-
nginx 配置
http {
# 开启gzip压缩
gzip on;
# 限制最小压缩,小于1字节文件不会压缩
gzip_min_length 1;
# 定义压缩的级别(压缩比,文件越大,压缩越多,但是cpu使用会越多)
gzip_comp_level 3;
# 定义压缩文件的类型
gzip_types text/plain application/javascript application/json text/css text/javascript image/jpg image/jpeg image/gif image/png;
# ...后面配置省略
}
8、负载均衡
-
概念:nginx 接收到客户端请求,转发到不同的服务器去处理
-
基本使用
http {
# 定义服务器均衡服务,名称为guigu
upstream guigu {
server localhost:81; # 服务器1
server localhost:82; # 服务器2
}
# ...后面配置省略
}
- Nginx 负载均衡调度算法
8.1 轮询(默认)
http {
upstream guigu {
server localhost:81; # 服务器1
server localhost:82; # 服务器2
}
# ...后面配置省略
}
- 轮询模式默认服务器权重都是 1,请求时:12121212121212
8.2. 加权轮询(weight)
http {
upstream guigu {
server localhost:81 weight=1; # 服务器1
server localhost:82 weight=3; # 服务器2
}
# ...后面配置省略
}
- 请求时:122212221222
8.3. ip_hash(会话保持)
http {
upstream guigu {
ip_hash;
server localhost:81; # 服务器1
server localhost:82; # 服务器2
}
# ...后面配置省略
}
- 让相同的客户端 ip 请求相同的服务器
8.4. fair(动态调度算法)
http {
upstream guigu {
fair;
server localhost:81; # 服务器1
server localhost:82; # 服务器2
}
# ...后面配置省略
}
- 根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配
- 注意:这是更加智能的调度算法,但 Nginx 本身不支持 fair 调度算法。如果需要使用 fair 调度,必须下载 Nginx 相关模块 upstream_fair