【nginx】反向代理和负载均衡

时间:2020-12-19 13:24:41

一、安装以及配置文件介绍


   nginx是一款轻量级的web服务器、反向代理服务器和电子邮件(IMAP、POP3)代理服务器,是在一个BSD-like写一下发行。由俄罗斯设计师开发,特点是占用内存小,并发能力强。nginx的并发能力确实在同类型的网页服务器中表现较好,*使用nginx网站用户的有:百度、京东、网易、、腾讯等。(百度百科

nginx.conf配置文件

【nginx】反向代理和负载均衡

host文件介绍

host文件的作用和介绍

 nginx虚拟主机的配置

这里需要注意的是,一个域名只能够绑定一个IP地址。一个IP地址可以被多个域名访问。


二、使用nginx来区分虚拟主机


有两种方式,第一种是通过端口来区分虚拟机


1.端口配置


在nginx.conf文件中添加一个Service节点,修改端口号就可以。

#通过端口来区分续集主机
server {
listen 81;
server_name 192.168.65.129;
location / {
root html81;
index index.html index.htm;
}
}

2.通过域名来区分虚拟主机


可以通过修改host文件指定域名的ip地址。
Host文件的位置:C:\Windows\System32\drivers\etc

在window下的HOST文件中添加如下配置


【nginx】反向代理和负载均衡


在nginx.conf文件中,添加server测试。

#测试域名访问虚拟主机
server {
listen 80;
server_name test.taotao.com;
location / {
root html81;
index index.html index.htm;
}
}


三、反向代理


1.正向代理


   A同学需要创业,然后想向马云通知借款投资,但是吃了闭门羹。后来经过找关系,知道自己的大学王老师是马云的同学,所以A同学就拖王老师从马云哪里借钱,成功借到了,然后将钱交给了A同学。这里的王老师就扮演了关键的角色,代理,也就是正向代理。王老师替A同学办这件事情的过程中,真正借钱的人是谁,马云是不知道的。这一点非常关键。又比如饭店中,厨师是不知道谁在点菜的,其中的送餐员就扮演了代理的角色。

我们常说的代理是正向代理,正向代理的过程,它隐藏了真实的客户端,服务端不知道真实的客户端是谁,客户端的请求时由代理服务器来完成的。

【nginx】反向代理和负载均衡


2.反向代理


   我们有问题经常拨打10086客服,但是我们不需要关心,为我们服务的是谁?是男的,女的,帅气的还是漂亮的,我们关心的只是问题能够能否得到专业的解答。我们只需要拨通10086的总机号码,电话那一头总有人回答你。那么这里的10086总机号码就是我们说的反向代理。客户不知道真正提供服务的人是谁。

  反向代理隐藏了真实的服务端,当我们请求www.baidu.com的时候,就像拨打10086一样,背后可能有成千上万的服务器为我们提供服务。但是具体哪一台,你不需要知道,你只需要知道代理服务器是谁就可以了。这里,www.baidu.com就是我们的反向代理服务器,反向代理服务器会把我们的请求转发到真是的服务器那里去。Nginx就是非常好的反向代理服务器,用来做负载均衡。

【nginx】反向代理和负载均衡



我们访问的baidu.com,然后从这个服务器拿到资源,其实可能这些资源并不是从这个服务器里面拿出来的,而是这个服务器作为反向代理,从别的服务器上拿过来的。

我们可能是这样访问 百度的。

【nginx】反向代理和负载均衡

但是我们实际访问过程中,是这样运行的。

【nginx】反向代理和负载均衡


3.对比


   两者区别在于,代理的对象不同,正向代理代理的是客户端,反向代理代理的是服务端。实际上代理在两种代理中都是好代为收发请求 和响应,不过从结构上正好左右互换,所以把后出现的那种代理方式叫做反向代理。

参考连接:

反向代理何为反向代理


4.反向代理场---nginx反向代理tomcat服务


(1) windos host文件中添加域名


【nginx】反向代理和负载均衡


(2)nginx中配置两个tomcat服务器

#第三个服务器,反向代理tomcat
upstream tomcats{
server 192.168.65.129:8080
server 192.168.65.129:8081
}
server {
#监听端口
listen 81;
#域名可以有多个,用空格隔开
server_name tomcat.taotao.com;

#charset koi8-r;

#access_log logs/host.access.log main;
#root location

location / {
proxy_pass http://tomcats; //http是需要带的,不然是不生效的。
index index.html index.htm;
}
}
upstream:

实现反向代理的功能,将真正的请求转发到后端服务器上,并且从后端服务器读取响应,发回到客户端。upstream是一种特殊的handler,只不过响应的内容不是自己产生的,而是从后端服务器读取的。


(3)重新启动Nginx


(4)直接访问tomcat.taotao.com
     然后就可以直接访问到tomcat界面
【nginx】反向代理和负载均衡


(5)工作流程

请求的是nginx,但是实际上执行任务是的tomcat,其实tomcat所进行的是请求的转发,转发给tomcat服务。采取的策略,是轮询。轮流为你提供服务。


四、负载均衡


常用的算法是轮询算法和weight算法。


1.轮询算法

  按照客户端的请求顺序,把客户端的请求逐一分配到不同端口的服务器,如果后端服务器宕机,宕机服务器会自动的被踢出,使用户的访问不受到影响。请求会分配给正常的服务器。轮询算法是nginx默认的算法,使用简单不需要额外的配置。


2.weight算法

weight算法是在轮询的基础上加上权重,权重轮询和访问成正比,权重越大,转发的请求就会越多。使用过程中,只需要在upstream后面添加一个weight即可代表权重。如下图:

weiht=2代表2/3的概率,访问第一个server,1/3的概率访问第二个server。

【nginx】反向代理和负载均衡



3.ip_hash

每个请求按照访问ip的hash结果分配,这个每个访客固定一个后端服务器,可以解决session的问题。


4.fair(第三方)

按照后端服务器的相应时间来分配请求,相应时间短的优先分配。


小结


nginx反向代理,负载均衡,思想很耐人寻味。