一、什么是Nginx?
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,其特点是占有内存少,并发能力强。中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
二、为什么需要Nginx?
在最初的项目中,由于并发量小,用户少,所以一台服务器就可以满足日常需求,如下图:
但是,随着业务的发展,用户越来越多,一台服务器很明显满足不了我们的日常需求了:
所以,我们想到一个解决的办法就是横向扩展,增加几台服务器,而增加服务器后我们就必须还要增加一个代理服务器,让所有用户的请求都打到这个代理服务器上,由代理服务器按照一定的规则进行转发到不同的服务器上来处理这些请求:
这个代理服务器,就是Nginx。
三、正向代理和反向代理的区别
正向代理:
正向代理主要指的的客户端层面,比如LOL手游的国际服或台服,国内其实并不能玩,但是可以下加速器,加速器就会通知客户端需要开启VPN,而VPN意思是虚拟专用网络,也可以把它当成正向代理的一个服务器。正向代理主要指的是客户端这边。
反向代理:
反向代理指的就是服务端层面的,对于用户客户端而言是感知不到的,反向代理就是指客户端的请求统一到达反向代理服务器,由反向代理服务器来转发请求到各个服务器上。
反向代理的好处就是:
- 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
- 负载均衡,通过反向代理服务器来优化网站的负载
四、Nginx的负载均衡策略
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
轮询:就是3台服务器一个接着一个的轮流接收请求
加权轮询: 对每个服务器设置权重,权重高的,就接收的请求多一些,反之权重低的就接收的请求少一些
iphash:对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。(一般来说都是用redis来解决session不共享问题,这个了解即可。)
五、Nginx的安装
以下是Nginx在Linux系统上的安装步骤:
- 官网下载nginx稳定linux版本:nginx官网
- 下载完毕,上传到linux上,并解压安装
tar -zxvf nginx-1.20.1.tar.gz --解压nginx
cd nginx-1.20.1 --进入nginx目录
./configure --prefix=/usr/local/nginx/ --创建makefile文件,此步骤可能会报错,原因是未安装pcre包
yum -y install zlib zlib-devel openssl openssl–devel pcre pcre-devel --将需要安装的一系列包都安装上,再次进行上面的命令即可
make --编译(make的过程是把各种语言写的源码文件,变成可执行文件和各种库文件)
make install --安装 (make install是把这些编译出来的可执行文件和库文件复制到合适的地方,也就是./configure命令中指定的安装目录) - 安装完毕,下面启动nginx
cd /usr/local/nginx/sbin/ --进入nginx安装后的sbin文件下
./nginx 启动nginx - 测试,nginx默认是80端口,所以直接访问IP(前提是防火墙和安全组已释放80端口),出现以下界面即表示成功!
nginx常用命令:
- cd /usr/local/nginx/sbin/
- ./nginx 启动
- ./nginx -s stop 停止
- ./nginx -s quit 安全退出
- ./nginx -s reload 重新加载配置文件,这个重点记下,实际开发中改变配置文件后要经常重新加载配置文件
- ps aux|grep nginx 查看nginx进程
六、Nginx实战应用
nginx是反向代理,代理的是多台服务器,这里我们启动两个springboot项目的jar包,来模拟两个服务器。
java -jar springbootdemo.jar --server.port=9527
java -jar springbootdemo.jar --server.port=9528
用不同的端口启动,防止端口冲突。
启动成功,两个端口均能访问。
现在我们要配置nginx,使用nginx来代理这两个服务器(模拟出来的)。首先要编写nginx的配置文件,进入nginx安装目录下的conf包,编辑nginx.conf文件
vim nginx.conf
增加上述标红的配置,weigt值就是权重,负载均衡的一种算法
进入nginx目录下的sbin目录
./nginx -s reload 重新加载配置文件
最后进行测试,浏览器访问80端口(也就是直接访问ip):
访问成功,则表示这两台服务器已被nginx代理。
刷新页面4此,看后台输出:
由于权重比不同,所以请求到达每个服务器上的数量也不同。