文章目录
学习目标
1、Nginx简介2、正向代理和反向代理
3、负载均衡理解
4、Nginx安装-Windows
5、Nginx安装-Linux
6、Nginx的常用命令
7、Nginx实战及总结
Nginx官网:http://nginx.org/en/download.html
Nginx中文文档:https://www.nginx.cn/doc/
学习内容
一、Nginx简介
1、什么是Nginx?
Nginx (engine x)是一个高性能的HTP和反向代理web微务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Ramble.ru站点(俄文:PaM6/nep)〕开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。
其特点是占有内存少,并发能力强,事实上ngins的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、陈讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,人约为2220万个网站。
Nginx是一个安装非常的简单、配置文件非常简诘(还能够支持peri语法)、Bug非常少的服务。Nginx启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不问断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达50,000个并发连接数的响应。
2、场景需求(转载)
1)、Web服务器:网站实现动静分离,目的是让网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。
安装在服务器上得(Linux服务器)http和反向代理服务组件,是一个负载均衡服务,用户访问服务器尤其在高并发得时候很有作用,可以用户访问静态资源和动态请求分开,分配给不同得执行单元,提高响应速度;
实现方式: 使用静态服务器及反向代理2个功能,静态资源由NGINX本地提供,动态的资源反向代理到后端的TOMCAT提供,其中TOMCAT可以和NGINX在同一台服务器也可以在不同服务器上 。
2)、反向代理:业务服务器不能直接被外部网络访问,即不能直接映射外网ip,需要一台代理服务器,而代理服务器能被外部网络访问同时又和业务服务器网络联通。
实现方式: 使用反向代理功能,将NGINX服务器映射外网ip,业务服务器无需映射外网ip,外网用户访问时首先访问NGINX服务器,然后再由NGINX服务器访问业务服务器资源后转发给用户,目前主流推荐采用此方案,这样既满足了业务需外网访问的需求,又满足业务服务器的安全。
3)、统一访问入口:多套业务系统需使用同一个ip或者域名进行访问,以不同后缀进行区分,需要一台NGINX服务器做统一的访问入口。
实现方式: 使用反向代理功能,将所有NGINX服务器作为外网或内网用户统一的访问入口,然后根据设置的localtion规则匹配不同的后缀转发至不同的业务服务器。通常和上一个反向代理场景结合使用实现使用一个域名来访问多个业务系统,同时甚至还可以实现统一的https访问,实现方式为在NGINX服务器上配置证书,后端所有业务服务器无需每台额外配置证书即可实现https访问。
4)、负载均衡:主流分布式架构方案中实现将请求按一定的策略分发至后端多台业务服务器,实现业务服务的高可用及高并发。
实现方式: 实际相当于使用反向代理和负载均衡2个功能,根据配置的url后缀规则转发至upstream中各服务器列表,默认按轮询策略,同时还支持权重和ip_hash ,有redis缓存登录seesion的方案中推荐使用轮询策略,否则使用ip_hash策略实现同一ip的用户请求固定至后端同一台服务器
5)、解决浏览器跨域问题:跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。跨域有很多解决办法,Nginx只是解决办法其中之一,适用于不改目标服务器配置,又能提供搭建一个中转Nginx服务器的场景。
实现方式: 使用NGIXN反向代理功能,如下图某项目实际案例,需实现访问主程序业务服务A中首页桌面嵌套业务服务B的相关页面,使用NGINX作为统一入口,当配套到业务服务A嵌套页面url后缀时转发至业务服务B。相当于NGINX服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。此案例中3个服务在同一台服务器上也产生跨域问题,针对3个服务在不同服务器的场景此方案也适用,原理是一样的。
6)、行为分析:需统计整个系统访问的浏览器信息、IP、地理位置、操作系统等信息作为项目上大数据展示的初始数据来源。
实现方式: 通常搭配反向代理、统一访问入口的场景,使用NGINX的日志及地理位置库插件来采集信息,然后由eCloud平台进行初步分析后供大数据平台采集和展示。主流发布的一键部署包已包含地理位置库插件。
场景需求的内容转载于:https://www.cnblogs.com/wmqiang/p/10565052.html
Nginx作用
二、正向代理和反向代理
Http代理,反向代理: 作为web服务器最常用的功能之一,尤其是反向代理。
1、正向代理
相信大家玩游戏上网都有用过VPN(虚拟专用网络),由于带宽延迟非常慢,但换个VPN就会好很多,因为在中国是不能访问到外网的,例如访问google是访问不了的,但我们连接的VPN之后就可以访问了,这是为什么呢?其中的原理是什么?
这就是正向代理,例如你的电脑或客户端开了个VPN,你们这个VPN就相当于这个电脑开了个代理,这个代理会帮我们去请求外部的资源,例如你的代理服务器在香港,而香港的服务器可以访问外国的服务器,请求了外国的服务器就返回需要的数据,这样我们就可以访问到外网了,香港的代理服务器就相当于一个跳板,所以可以总结出,正向代理就是代理客户端的我们称之为正向代理,而代理服务器端的呢,则便是反向代理。
2、反向代理
例子:像我们平时一直访问的百度,一直都是www.baidu.com来进行访问,但我们都知道,肯定不止一台服务器的,可能每个城市都会有百度的服务器,只是我们访问百度的时候不感知而已,因为客户端不需要任何配置就可以访问。
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
三、负载均衡理解
-
增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的
情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负 载均衡 -
客户端发送多个请求到服务器,服务器处理请求,有一些可能要与数据库进行交互,服 务器处理完毕后,再将结果返回给客户端。
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,lp hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
轮询(按顺序依次循环的把请求打到不同的服务器里):
加权轮询(根据设置的权重按比例发送请求):
iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题.
即使Nginx提供了解决不同服务器session共享的问题,但性能不是很好,因为当这台服务器挂掉了,所有的信息也丢失了,所以对于session共享的问题还是推荐用Redis来解决。
动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、 html、 jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。
目前,通过使用Nginx大大提高了我们网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!
四、Nginx安装-Windows
windows下安装
1、下载nginx
http://nginx.org/en/download.html下载稳定版本。
以nginx/Windows-1.20.2为例,直接下载 nginx-1.20.2.zip.下载后解压,解压后如下:
2、启动nginx
(1)、直接双击nginx.exe,双击后一个黑色的弹窗一闪而过
(2)、打开cnd命令窗口,切换到nginx解压目录下,输入命令nginx.exe,回车即可
3、检查nginx是否启动成功
直接在浏览器地址栏输入网址http://localhost80回车,出现以下页面说明启动成功!
出现这样的情况说明nginx启动成功。
4、配置监听
我们可以先看一下nginx的一个配置文件:
当我们修改了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
1.taskkill是用来终止进程的,
2./f是强制终止.
3./t终止指定的进程和任何由此启动的了进程。
4. /im示指定的进程名称.
五、Nginx安装-Linux
1、安装gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,则需要安装:
- yum install gcc-c++
2、PCRE pcre-devel安装
PCRE(Pel CompatibleRegular Expessions)是一个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、安装nginx
下载完成后上传到自己的服务器或者虚拟机,首先查看一下自己的服务器有没有Nginx,输入指令:whereis nginx
这种情况就是没有。
我是已经上传了,下面便是解压:tar -zxvf nginx-1.20.2.tar.gz
解压完成之后我们可以看看其中的目录:
会发现我们的目录里面有一个绿色的文件,我们可以通过启动它帮我们配置一下:
[root@localhost nginx-1.20.2]# ./configure
配置完成之后,在输入指令:make 一下,当出现这样的错误:
make[1]: 离开目录“/opt/nginx-1.20.2”,当出现这样的情况时,我们输入指令:make install
就可以了,然后我们查询一下启动路径:whereis nginx
然后呢,我们去sbin启动nginx:
然后游览器访问一下:
倘若出现无法访问到页面的情况,记得关防火墙(systemctl stop firewalld)或像阿里云服务器测试的记得开放端口。
六、Nginx的常用命令
- cd /usr/local/nginx/sbin/
- ./nginx 启动
- ./ nginx -s stop 停止
- ./nginx -s quit 安全退出
- ./nginx -s reload 重新加载配置文件
- ps aux|grep nginx 查看nginx进程
相关命令:
1.# 开启
2. service firewalld start
3. # 重启
4. service firewalld restart
5. # 关闭
6. service firewalld stop
7. # 查看防火墙规则
8. firewall-cmd --list-all
9. # 查询端口是否开放
10. firewall-cmd --query-port-8080/tcp
11. # 开放80端口
12. firewall-cmd --permanent --add-port=80/tcp
13. # 移除端口
14. firewall-cmd --permanent --remove-port=8080/tcp
15.
16. # 重启防火墙(修改配置后要重启防火墙)
17. firewall-cmd --reload
18.
19. # 参数解释
20. 1、 firwall-cmd: 是Linux提供的操作firewall的一个工具;
21. 2、–permanent : 表示设置为持久;
22. 3、–add -port : 标识添加的端口;
七、Nginx实战及总结
当我们启动了两个不同端口的两个项目,那应该如何进行负载均衡呢?
以下的图是根据教学视频截取的:
只需要这样写好配置,当我们访问自己的域名时,便会根据所给的负载均衡轮询请求,我们可以根据设置weight来设置权重,至于更信息的配置,如动静分离这些等等功能,大家可以直接问度娘:Nginx配置,便有详细的教程,此次的学习笔记就到这里。
注: 以上内容来源于百度上的摘录和B站狂神的视频教程https://www.bilibili.com/video/BV1F5411J7vK?p=7&spm_id_from=pageDriver