1.Nginx简单介绍与引入

Nginx 是一个高性能的HTTP和反向代理web服务器。同时它还提供了IMAP/POP3/SMTP服务。
这里我们延接上一章的话题进行拓展,所以主要介绍nginx的反向代理。
作为一个反向代理服务器,它可以通过配置文件来实现集群和负载均衡 (热加载)以及静态资源虚拟化。
那么有的人就会问了,什么是反向代理呢?下面就具体讲一下。

2.正向代理与反向代理

说到反向代理,我们总是会先提起正向代理这个概念。

  • 正向代理
    正向代理是客户端请求目标服务器之间的一个代理服务器。
    客户端发起请求,首先会经过代理服务器,然后再转发请求到目标服务器,获得内容后最后才响应给客户端。而其中所处的代理服务器,就称之为正向代理服务器。
    有点类似于上电脑课的时候,老师电脑里的管理器,可以直接管理学生电脑,调配网速甚至过滤一些见不得人的网址,记得那时候玩4399小游戏被老师发现后,再也没在那个老师的电脑课上登上这个网址哈哈。
  • 反向代理
    理解了正向代理,接下来继续讲一下反向代理。
    客户端原本是直接通过HTTP协议访问某网站应用服务器,而在这中间我们加了一个代理服务器,由代理服务器来决定具体去访问目标服务器的某个ip,然后将结果返回给客户端,此时这个代理服务器称之为就是反向代理服务器。

举例说一下正向代理与反向代理的区别:
正向代理,就是相当于去访问YouTube,我们是无法直接访问服务器的,于是客户端借助了一台代理服务器来代替他去对服务端进行请求。而服务器并不知道真实发起请求的客户端是谁的。然后请求访问后请求会返回给代理服务器,然后再通过代理服务器返回给客户端,这个就叫做正向代理。

反向代理,就类似于拨打10000号人工客服,经过一个主线拨打后,随机给我分配一个客服,这个客服我也不知道会是哪个小哥哥或者小姐姐,反正按照一套规则(响应时间,负载均衡等)给我提供服务的客服,而这个操作,就类似于反向代理。

反向代理的配置

server { 
	listen 80;
	server_name localhost;
	location / { 
		proxy_pass http://demo; 
	}
}

3.负载均衡

那这时候又有问题了,为什么不需要方向代理也可以直接进行HTTP访问,为什么我还要用反向代理来处理问题吗,不嫌麻烦吗。
这个问题同样可以用人工客服的话题来类比,随着用户量提升,一台服务器承受不住压力,这时候就需要将请求分配给多台服务器,以防某个机器突然挂掉,或者压力过大,从而影响用户的使用体验甚至造成一些严重的损失。

这个时候,就可以用到Nginx的反向代理来实现负载均衡了。

负载均衡的配置

upstream test{ 
	server 192.168.1.165:8080;
	server 192.168.1.166:8080;
}
server { 
	listen 80;
	location / { 
		proxy_pass http://demo;
	}
}

4.虚拟主机

有用户量过大而需要负载均衡,那么同时也有刚起步公司为了降低成本,将不同网站部署在同一台服务器。
同时可以让用户访问两个不同的域名打开网站不同,但服务器相同的网站,这个叫做虚拟主机

虚拟主机配置


server { 
	listen 80 ;
}
server { 
	listen 80;
	server_name www.test1.com; 
	location / { 
		proxy_pass http://192.168.1.165:8080; 
	}
}
server { 
	listen 80;
	server_name www.test2.com; 
	location / { 
		proxy_pass http://192.168.1.165:8081;
	}

5.抢占机制

正常情况下的并发处理机制大致有三种:多线程、多进程、异步机制。
Nginx同时采用了这三种机制,而其中的异步机制,乃是使用了异步非阻塞方式来处理的。
我们先说一下传统的处理机制

传统的模式,每次阻塞后会生成新的worker,造成大量资源浪费。

而Nginx采用的异步非阻塞方式可以有效的处理请求。
这也是Nginx能够承载高并发的原因之一。

抢占机制配置

events { 
   # 默认使用epoll
   use epoll;
   # 每个worker允许连接的客户端最大连接数
   worker_connections  1024;
}

附:nginx的几个常用命令:

./nginx -s stop  暴力关闭nginx 会关闭用户连接请求 (有黑客入侵的时候使用这个可以立即关闭)
./nginx -s quit 优雅的停止,不接受新用户的同时,且用户请求完毕,才会关闭
./nginx -v 当期版本号
./nginx -V 具体信息 
./nginx -h/-?   命令帮助
./nginx .c 指定核心配置位置

本文地址:https://blog.csdn.net/weixin_42887211/article/details/110530761