https://blog.csdn.net/qq_33369905/article/details/113245513?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%8B%82%E7%A5%9E%E8%AF%B4nginx&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-113245513.nonecase&spm=1018.2226.3001.4187
公司产品出现瓶颈?我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jrHsxquy-1634119456815)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/6749870a78a275af1d438f266fa42f49.png)]
但是慢慢的,使用我们平台的用户越来越多了,并发量慢慢增大了,这时候一台服务器满足不了我们的需求了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yeWqNMlJ-1634119456817)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/20296cd81a0863410248039e3e02f514.png)]
于是我们横向扩展,又增加了服务器。这个时候几个项目启动在不同的服务器上,用户要访问,就需要增加一个代理服务器了,通过代理服务器来帮我们转发和处理请求。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t9sHyI7G-1634119456819)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/628bdeb4e401ac8f602da8ab4391c94c.png)]
我们希望这个代理服务器可以帮助我们接收用户的请求,然后将用户的请求按照规则帮我们转发到不同的服务器节点之上。这个过程用户是无感知的,用户并不知道是哪个服务器返回的结果,我们还希望他可以按照服务器的性能提供不同的权重选择。保证最佳体验!所以我们使用了Nginx。
什么是Nginx?反向代理的服务器。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。
Nginx作用? 1.反向代理Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
正向代理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiVsJEVO-1634119456820)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/a716f56bc25ee06ecd80e017e4a620d6.png)]
反向代理反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只
需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返
回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器
地址,隐藏了真实服务器 IP 地址。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yyoULZ2-1634119456822)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/c055144e73737cb79afcadb23f1b5268.png)]
2.负载均衡横向增加服务器的数量。这时候集群的概念产生了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。
内置策略为轮询,加权轮询,Ip hash。
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服
务器处理完毕后,再将结果返回给客户端。
这种架构模式对于早期的系统相对单一,并发请求相对较少的情况下是比较适合的,成
本也低。但是随着信息数量的不断增长,访问量和数据量的飞速增长,以及系统业务的复杂
度增加,这种架构会造成服务器相应客户端的请求日益缓慢,并发量特别大的时候,还容易
造成服务器直接崩溃。很明显这是由于服务器性能的瓶颈造成的问题,那么如何解决这种情
况呢?
我们首先想到的可能是升级服务器的配置,比如提高 CPU 执行频率,加大内存等提高机
器的物理性能来解决此问题,但是我们知道摩尔定律的日益失效,硬件的性能提升已经不能
满足日益提升的需求了。最明显的一个例子,天猫双十一当天,某个热销商品的瞬时访问量
是极其庞大的,那么类似上面的系统架构,将机器都增加到现有的顶级物理配置,都是不能
够满足需求的。那么怎么办呢?
上面的分析我们去掉了增加服务器物理配置来解决问题的办法,也就是说纵向解决问题
的办法行不通了,那么横向增加服务器的数量呢?这时候集群的概念产生了,单个服务器解
决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个
服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们
所说的负载均衡。
轮询[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evdMqpBP-1634119456823)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/25009a45b5ed58ada1003e8098f7aed0.png)]
加权轮询[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WXYDULXj-1634119456824)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/9a278aaee0f7371c2d8c53319d796914.png)]
iphashiphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y8jQGL7I-1634119456824)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/337904e2f9489dc8aba62581515f2f42.png)]
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7aCMq3Bk-1634119456825)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/2bf9ae957ad281e4bda087d2147f0970.png)]
Nginx的安装 windows下安装http://nginx.org/en/download.html
去官网下载windows稳定版本即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7YN2wxYG-1634119456826)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013165331125.png)]
2、启动nginx有很多种方法启动nginx
(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe ,回车即可
3、检查nginx是否启动成功直接在浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKEP0CsW-1634119456827)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/681cf285ce268f21cc5353fb939c960d.png)]
4、配置监听nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MJ43Qddo-1634119456827)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/2ba85ee24a46440161df6c2e711a3173.png)]
当我们修改了nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,
只需要执行命令 nginx -s reload 即可让改动生效
5、关闭nginx如果使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx
(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
(2)使用taskkill taskkill /f /t /im nginx.exe
taskkill是用来终止进程的, /f是强制终止 . /t终止指定的进程和任何由此启动的子进程。 /im示指定的进程名称 .linux下安装
1、安装gcc
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++
2、PCRE pcre-devel 安装
PCRE(Perl Compatible Regular expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:
yum install -y pcre pcre-devel
3、zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
yum install -y zlib zlib-devel
4、OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
yum install -y openssl openssl-devel
5、下载安装包手动下载.tar.gz安装包,地址:https://nginx.org/en/download.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0rIi50q-1634119456828)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013165628269.png)]
下载完毕上传到服务器上 /root
6、解压
tar -zxvf nginx-1.18.0.tar.gz cd nginx-1.18.0
7、配置
使用默认配置,在nginx根目录下执行
./configure make make install
查找安装路径: whereis nginx
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXviWQP1-1634119456829)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/5280fe9639be9f3e700bdb5f1a2a0354.png)]
Nginx常用命令cd /usr/local/nginx/sbin/ ./nginx 启动 ./nginx -s stop 停止 ./nginx -s quit 安全退出 ./nginx -s reload 重新加载配置文件 ps aux|grep nginx 查看nginx进程
启动成功访问 服务器ip:80
注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!
相关命令:
# 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop # 查看防火墙规则 firewall-cmd --list-all # 查询端口是否开放 firewall-cmd --query-port=8080/tcp # 开放80端口 firewall-cmd --permanent --add-port=80/tcp # 移除端口 firewall-cmd --permanent --remove-port=8080/tcp #重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload # 参数解释 1、firwall-cmd:是Linux提供的操作firewall的一个工具; 2、--permanent:表示设置为持久; 3、--add-port:标识添加的端口;配置文件中轮询
upstream lb{
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=1;
}
location / {
proxy_pass http://lb;
}
配置文件中加权轮询
upstream lb{
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=1;
}
location / {
proxy_pass http://lb;
}
实战
在windows开启nginx。开启两个项目,端口分别是8080/8081。
让用户访问,那就浏览器输入localhost:8080或者localhost:8081
如果想要设置别的,那就改server_name。
localtion也是可以改的。当访问/时,跳转到代理服务器http://kaungstudy,然后再轮询。
localtion 地址{
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CAtgyhtc-1634119456829)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013170102702.png)]
总结: Nginx的作用?- 反向代理。将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
- 负载均衡。将请求分发到多个服务器上,将负载分发到不同的服务器。
- 动静分离。把动态页面和静态页面由不同的服务器来解析。
第一部分:全局块
第二部分:events 块
第三部分:http 块
http块-server块-location块
server块:配置IP
location块配置请求路径
反向代理实例一实现效果:使用 nginx 反向代理,访问 www.123.com 直接跳转到 127.0.0.1:8080
通过修改本地 host 文件,将 www.123.com 映射到 127.0.0.1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Peda7RpW-1634119456831)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013175732408.png)]
配置完成之后,我们便可以通过 www.123.com:8080 访问到第一步出现的 Tomcat 初始界
面。那么如何只需要输入 www.123.com 便可以跳转到 Tomcat 初始界面呢?便用到 nginx
的反向代理。
在 nginx.conf 配置文件中增加如下配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lGlKyUbA-1634119456831)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013175816792.png)]
如上配置,我们监听 80 端口,访问域名为 www.123.com,不加端口号时默认为 80 端口,故
访问该域名时会跳转到 127.0.0.1:8080 路径上。在浏览器端输入 www.123.com 结果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dx2KtGOU-1634119456832)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013175844870.png)]
反向代理实例二实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
第一步,准备两个 tomcat,一个 8001 端口,一个 8002 端口,并准备好测试的页面
第二步,修改 nginx 的配置文件
在 http 块中添加 server{}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4api0Fwi-1634119456833)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013175926991.png)]
负载均衡实例[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPrE7LkM-1634119456833)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013180021362.png)]
动静分离实例2)]
反向代理实例二实现效果:使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中
nginx 监听端口为 9001,
访问 http://127.0.0.1:9001/edu/ 直接跳转到 127.0.0.1:8081
访问 http://127.0.0.1:9001/vod/ 直接跳转到 127.0.0.1:8082
第一步,准备两个 tomcat,一个 8001 端口,一个 8002 端口,并准备好测试的页面
第二步,修改 nginx 的配置文件
在 http 块中添加 server{}
[外链图片转存中…(img-4api0Fwi-1634119456833)]
负载均衡实例[外链图片转存中…(img-cPrE7LkM-1634119456833)]
动静分离实例[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJZxSkgI-1634119456834)(1.%E7%8B%82%E7%A5%9E%E8%AF%B4Nginx-1.assets/image-20211013180112626.png)]



