项目背景
公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。
但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。
于是我们横向扩展,又增加了几台服务器。这个时候项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。
我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了今天的主角Nginx
。
nginx是什么?
nginx [engine x] 是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器,最初由 Igor Sysoev 编写。很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括 Yandex、Mail.Ru、VK 和 Rambler。根据 Netcraft 的数据,2022 年 7 月,nginx 服务或代理了 21.55% 最繁忙的网站。以下是一些成功案例:Dropbox、Netflix、Wordpress.com、FastMail.FM。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。
nginx能做什么?
以上简单介绍了nginx是什么,那nginx能做什么呢。主要是下面三点:
- 反向代理
- 负载均衡
- 动静分离
Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
正向代理:代理客户端,为客户端收发请求,使真实客户端对服务器不可见(可以解决跨域问题)
反向代理:代理服务器端,为服务器收发请求,使真实服务器对客户端不可见(替服务器统一接收请求做网关使用)。
正向代理与反向代理
正向代理中,proxy和client同属一个LAN,对server透明; 反向代理中,proxy和server同属一个LAN,对client透明。 实际上proxy在两种代理中做的事都是代为收发请求和响应,不过从结构上来看正好左右互换了下,所以把前者那种代理方式叫做正向代理,后者叫做反向代理。
负载均衡
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略:轮询,加权轮询,Ip hash等。
扩展策略:天马行空,只有你想不到的没有他做不到的。
轮询
可以将客户端请求均匀的打在服务器上。
加权轮询
哪个服务器配置好权重大,接收到的请求就越多。
IP hash
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。(可以保持会话,但是很少用这种方式去保持会话,例如我们当前正在使用wifi访问,当切换成手机信号访问时,会话就不保持了。就会引发问题。)
上述三种负载均衡策略,后台的服务器连接都是同一个数据库,所以数据是一致的,所有的文件也应该放在文件服务器上。
动静分离:在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
目前,通过使用Nginx可以大大提高网站的响应速度,优化用户体验,让网站的健壮性更上一层楼!
nginx-Linux安装
原始安装
1、安装nginx前首先安装四个依赖包 --以下命令一键安装四个依赖
yum -y install pcre pcre-devel gcc openssl openssl-devel zlib zlib-devel
2、下载并解压安装包
curl -O http://nginx.org/download/nginx-1.22.0.tar.gz -- 下载 (去官网找下载链接)
tar -zxvf nginx-1.22.0.tar.gz -- 解压
3、进入刚刚解压好的目录
cd nginx-1.22.0
4、分别执行下面命令
./configure --- 用来检测安装平台的目标特征
make --- 用来编译( 从Makefile中读取指令,然后编译)
make install --- 用来安装( 从Makefile中读取指令,安装到指定的位置)
5、nginx已完成安装,使用下述命令查找nginx安装目录
whereis nginx
-- 默认安装目录为
/usr/local/nginx
6、配置环境变量(nginx命令不可用)
vim /etc/profile (①shift+g跳到最后一行②o下一行插入)
最后一行输入
export PATH=$PATH:/usr/local/nginx/sbin
刷新配置文件
source /etc/profile
7、启动nginx
nginx
8、查看启动情况
netstat -ntlp
linux相关命令解释:
下载文件
curl -O 文件地址 -- 直接将文件下载下来
curl -o 文件名 文件地址 -- 将文件下载下来顺便改名
netstat -ntlp -- 查看启动情况
去nginx官网,点击下载
尽量使用稳定版本,复制下载地址,继续从上述第二步执行即可。
yum包管理器安装
yum包管理器一件安装
yum install -y nginx
安装完成,启动成功之后,在浏览器输入服务器IP即可看到nginx默认界面。
nginx常用命令
启动nginx
nginx
停止nginx
nginx -s stop
安全退出nginx
nginx -s quit
重启nginx(一般配置文件有改动可以直接使用下述命令,重启nginx)
nginx -s reload
nginx基本使用
nginx使用基本就是改动其配置文件,以及常用的几个nginx命令了。
nginx文件夹里有个conf文件夹,里面有个nginx.conf文件,这个文件就是nginx启动的默认文件了,我们可以根据不同需求改动这个配置文件以达到我们的目的。
修改nginx.conf文件内容,实现反向代理。如下配置可以根据不同请求地址,把请求分发在不同服务器上。(网关)
详细使用如下:负载均衡、反向代理。(upstream与server平级)
upstream httpd {
server 47.96.156.51:8080 weight=8 down; // weight就是权重,默认就是1
server 47.96.156.52:8080 weight=2;
server 47.96.156.53:8080 weight=1 backup;
}
- down:表示当前server暂时不参与负载
- weight:weight默认为1,weight越大,负载的权重就越大
- backup:其他所有的非backup机器down或者忙的时候,请求backup机器。
动静分离(适用于中小型网站,中小型网站需要分离出的静态资源不是特别多)
server {
listen 80;
server_name localhost;
# 反向代理(服务请求)
location / {
proxy_pass http://47.96.156.51:8080;
}
# 静态资源
# location配置规则相当于直接将/images拼接到了下面配置目录/www/resources的后面,上面反向代理同理
location /images {
# 静态资源路径配置 实际应该是/www/resources/images目录
root /www/resources;
index index.html index.htm;
}
}