nginx反向代理与负载均衡
- nginx 反向代理
- 负载均衡
nginx 反向代理
在介绍反向代理之前,先来说明一下什么叫做正向代理。
正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。
如果我们无法访问到谷歌网站的时候,就可以设置一个代理,然后我们去访问代理服务器,代理会向谷歌发送请求,然后再将数据返回给我们。这样的代理就是正向代理。
那么什么是反向代理呢?
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。
那么如何在nginx里面设置代理呢?其实我们可以这样去做,在配置文件中进行修改。主要是下面两个部分。
可见,我们监听的是82端口,但是我们设置了一个代理,当我们访问外网ip 82其实就是相当于访问到外网ip 8080。这是一台服务器,如果有多台服务器的话,我们设置代理的话也是这个原理。
当设置玩这个配置文件的反向代理之后,保存后,然后我们可以去检查一次配置是否正确,然后再去重新加载。 检查配置是否正确
代码语言:javascript复制nginx -t
重新加载
代码语言:javascript复制nginx -s reload
负载均衡
其实之前在微服务的时候我们也讲过负载均衡。
早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。
其实按照这个说明来说的话,其实负载均衡就是对服务压力的一个分担,在微服务里面我们一定会用到负载均衡,一个服务应用的资源部署在多台服务器,这样在访问应用资源的时候就可以按照相应的负载均衡的规则去访问相应的服务器,这样其实减少了单台服务器的压力。
nginx也可以做这个事情,它的负载均衡是基于反向代理。
那么如何在nginx里面去配置负载均衡,我们还是去配置文件里面进行修改。很简单,我们只需要按照一定的规则格式去写就行。
在单台服务器我们去模拟这个过程, 将同样的jar包拷贝,然后两个jar包分别运行在不同的端口。这样其实就可以模拟两台服务器上同样服务资源。当然这样两者一定是端口不同的。然后我们就可以模拟这个负载均衡策略了。
代码语言:javascript复制#upstream指令可以定义一组服务器
upstream targetserver{
server 192.168.200.201:8080;
server 192.168.200.201:8081;
}
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://targetserver;
}
}
划红线的部分一定是需要名字一致的。
如果多台服务器的话,上面的server部分是直接可以去改的, 默认的负载均衡策略是轮询,也就是访问两个服务的概率次数一样,这个次数概率一定是在次数很多的时候,才能每个趋于同等访问次数。
当然了自己也可以去指定策略
nginx给我们还提供了一些负载均衡策略
在配置文件设置参数就可以,比如权重的配置
代码语言:javascript复制#upstream指令可以定义一组服务器
upstream targetserver{
server 192.168.200.201:8080 weight=10;
server 192.168.200.201:8081 weight=5;
}
当然这个权重的体现就是在大量的数据访问的时候,才会基本去趋于它的设置特性。