Nginx (40分钟学会,快速入门)
目录
一、什么是Nginx ? 可以做什么 ?
二、正向代理和反向代理
三、负载均衡
四、动静分离
五、Nginx 常用命令
六、Nginx实战及总结
一、什么是Nginx ? 可以做什么 ?
- Nginx 是高性能的 HTTP 和反向代理的 web 服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发的连接数.
- Nginx特点就是内存少,并发能力强。事实上Nginx的并发能力确实在同类型的网页服务器中表现比较出色,中国大陆使用Nginx网站用户有:百度、京东 、新浪 、 网易、腾讯 、淘宝等。
为什么要使用Nginx ?
之前我们传统服务,访问量小的情况下都是直接访问到 服务IP 地址。
等用户量变成 10w ,20w的时候,一台服务就会处理不了这么多请求,可能会出现内存溢出 oom。服务就会宕机。
这时候我们Nginx 就发挥了重大作用:
客户端只需要访问同一个IP地址。通过Nginx 的负载均衡 + 反向代理,把10w,20w的用户量打到不同的服务器上进行处理,还可以根据服务的性能,设置服务权重大小的,权重大的服务就会接受请求多一点,权重小的服务就会接受请求少一点。
二、正向代理和反向代理
- 正向代理:代理客户端的,指的是客户端通过代理服务器去重定向请求访问到目标服务器的一种代理服务。
- 反向代理:代理服务器端的,指的是客户端无感知地只会访问同一个服务器ip(域名)。其实服务访问的请求请求到了不同的服务器上。
三、负载均衡
负载均衡策略:轮询、加权轮询、ipHash
轮询:很公平,比如有三台服务器,那么对每个服务器分发一条请求。
加权轮询:对权重大的服务器发大量的请求,对权重小的服务器发少量的请求。
ipHash:好处:解决session共享问题,可保证同一个用户固定访问同一台服务器。
坏处:如果指定访问的这一台服务器挂了,数据会丢失。建议使用 Redis 来存储session 信息
四、动静分离
概念:在我们的软件开发当中,有些请求是需要后台处理的,有些请求是不需要后台处理的(比如:html,css,js等文件),这些不需要后台处理的文件被称为
“静态文件”。我们可以把动态网页根据一定的规则拆分为动态资源和静态资源,我们可以将这些静态资源作为缓存,以此来提高相应的速度。
五、Nginx 常用命令
1.cd /usr/local/nginx/sbin 进入nginx路径
2../nginx -s stop 停止
3../nginx 启动
4../nginx -s quit 安全退出
5.ps aux|grep nginx 查看nginx进程
6../nginx -s reload 重新加载配置文件
六、Nginx实战及总结
使用Nginx 结合Springboot项目实现 反向代理 + 负载均衡
当我们客户端去请求服务的时候,只会去请求同一个IP地址和端口。通过我们的Nginx 反向代理 + 负载均衡,把接受到的请求按照服务器的权重设置,分发给每一台服务器进行处理。客户端的用户是无感知的,后续添加新的服务器,用户也只是访问的同一个地址。
如图所示:
那接下来我们实战演示:
1、首先我们创建个Springboot项目,写个测试代码如下:
@RestController
public class controller {@RequestMapping("/index")public String toString(String name) {String str = "hello nginx," + name;System.out.println(str);return str;}
}
然后分别用8082,8083端口启动起来服务:
2、配置Nginx
proxy_pass:配置反向代理地址
upstream:配置服务的负载均衡,还可以设置服务的权重。
#上面省略upstream ks{# 负载均衡,weight 可设置服务的权重server 127.0.0.1:8082 weight=1;server 127.0.0.1:8083 weight=1;# 后续有新的服务可在此处继续添加IP地址}server {# 只要是访问 8071 的端口,就会走下面的代理地址listen 8071;server_name localhost;location / {root html;index index.html index.htm;# 反向代理proxy_pass http://ks;}
3、测试
请求地址为Nginx配置的访问地址:http://localhost:8071,因为我们服务权重都配置的是1,那么每个服务基本上是轮询状态,平均每个服务都会收到一次请求。
第1次请求访问,请求到了82的端口服务。
第2次请求访问,请求到了83的端口服务。
到此Nginx根据每个服务的权重设置,把请求分别转发到了每个服务!