验证配置是否正确: nginx -t
查看Nginx的版本号:nginx -V
启动Nginx:start nginx
重启Nginx:nginx -s reload
快速停止或关闭Nginx:nginx -s stop
正常停止或关闭Nginx:nginx -s quit
配置文件修改重装载命令:nginx -s reload
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。
Nginx专为性能优化而开发,性能是其重要的考量,实现上非常注重效率,能经受高负载的考验,能支持高达50000个并发连接数
1: 静态服务器:
在我们前后端分离的项目中 我们的前端项目开发完毕之后,也是需要发布到一个服务器上,供用户访问 此时
就需要用到nginx ?
2: 虚拟主机:
我们一个服务器可以模拟多个虚拟主机,虽然访问的链接不同,但是都表示一个主机 所以访问的内容是一致的
3: 反向代理:
nginx可以作为反向代理服务器,客户端发送http请求,访问的是nginx这个反向代理服务器,反向代理服务器nginx会选择目标服务器,最终完成请求,获取数据
?
4: 负载均衡:
我们部署应用,项目运行在tomcat上 一个tomcat的并发访问默认200 手动调并发数量 最多600-700的并发
当我们用户量比较大的时候 我们的项目要占用不同的端口部署多个,目的起到请求分流的效果,减轻服务器 的压力,此时就需要负载均衡
进入解压目录,双击即可启动,此时可能页面一闪而过
http://localhost
nginx做静态资源服务器配置的方式有很多
当我们访问http://localhost时 浏览器会出现一个页面 这个页面 就是nginx解压目录中的html文件夹中的index.html ?
既然能够显示这个index.html 我们可以把我们的页面也放到这个目录下,此时就能访问
nginx -s reload
问题描述:
1: 默认加载index.html 为什么默认加载index.html
2: 不想加载index.html 我想进入加载其他的页面 或者我的首页就不叫index.html
修改配置文件
?代理访问:( 很有可能404 , 就是代理路径 proxy_pass 末尾带不带/的问题, 好像本地不需要代/ , 互联网需要带 /)
https://www.qq.com/
部署静态资源除了放在nginx解压目录中之外 还可以放到电脑上的任何一个地方 然后通过配置的访问 指定到这个位置
浏览器访问
nginx的配置文件名字叫 nginx.conf 在解压目录下的config目录
第一部分:全局块
主要会设置一些影响Nginx 服务器整体运行的配置指令
第二部分:Events块
worker_connections 1024;表示每个 worker process 支持的最大连接数
第三部分:Http块
这是Nginx服务配置中最频繁的部分,代理、缓存和日志定义等绝不多数功能和第三方模块的配置都在这里。需要 注意的是:http 块也可以包括http全局块、server块。server 块又包含全局server块和localtion块。
main: ? # 全局配置,对全局生效
events: # 配置影响 Nginx 服务器或与用户的网络连接
http: ? # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置
? upstream: ? # 配置后端服务器具体地址,负载均衡配置不可或缺的部分
? server : #配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块
? server
? ? location: # server 块可以包含多个 location 块,location 指令用于匹配 uri
? ? location
我们一个服务器可以模拟多个虚拟主机,虽然访问的链接不同,但是都表示一个主机 所以访问的内容是一致 的,nginx的一个server标签就是一个虚拟主机 我们配置多个server标签就可以代表多个主机
1.配置多个server
2.添加域名映射
C:\Windows\System32\drivers\etc\hosts文件
3.重启测试
概念: Nginx代理客户端来访问互联网。典型代表:翻墙。
特点: 客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户 端;正向代理模式隐藏了真实客户端信息。
概念: Nginx作为反向代理服务器接收来自客户端的请求,并将请求转发给后端的真实服务器集群中的一台。
? ? 典型代表:负载均衡
? ? ?
特点: 主要用于服务器进群分布式部署的情况下,隐藏了服务器的真实信息
1.新建springboot工程,启动
2.配置反向代理
3.nginx重启测试
场景: 当一个应用占用不同的端口启动多次的情况下, 每个端口的应用都包含所有的功能,在高并发的情况下 做到分流效果,此时客户端的一个请求过来,到底这个请求要去哪个服务器中访问,此时面临了一个一对多的关系,此时需要负载均衡算法
1.启动多个springBoot工程
略
2.配置负载均衡
通过测试 默认是轮训 ?
除了轮训还有其他的负载均衡策略?
比如:?
1.加权轮询:
2.ip_hash:
每个请求按照IP的hash结果分配,同一个IP客户端访问一个固定的后端服务器。
优点:可以保证来自同一个IP的请求,被打到固定的机器上,可以解决session的问题。
3.url_hash
按访问url的hash结果来分配请求,相同url固定转发到同一个后端服务器进行处理。
任何负载均衡策略都可以携带参数?
1: down:当前服务器暂不参与负载;
2: weight:权重,值越大,服务器的负载量越大;
3: max_fails:允许请求失败的次数,默认为1;
4: fail_timeout:max_fails次失败后暂停的时间;
5: backup:备份机,只有其他所有的非backup机器down或者忙时才会请求backup机器。
第一步:
安装需要的插件
?
yum -y install gcc-c++
?
yum -y install zlib zlib-devel openssl openssl-devel
?
yum -y install patch
第二步:
新建目录
mkdir /opt/nginx
?
进入目录
cd /opt/nginx
第三步:
上传nginx的包
第四步:
解压
tar -zxvf nginx-1.14.2.tar.gz
第五步:
进入解压目录
cd nginx-1.14.2
?
执行命令
./configure (注意这个命令可以携带参数)
第六步:
执行make指令 ?
make ?
执行安装指令
make install
第七步:
默认的安装的目录: /usr/local 目录下的nginx ?
进入安装目录
cd /usr/local/nginx
第八步:
//进去sbin目录
cd sbin ?
?
启动nginx ?
./nginx
第九步:测试
和win使用类似
nginx能够并发处理5万请求,请问nginx 请求处理机制是如何的? ?
一个nginx可以并发处理多个请求,就证明了nginx和客户端是一对多的关系 , 也就是说nginx服务器有能力同时给多个客户端提供服务, 一般来说,能够完成并行处理的方式大概有如下几种
?
第一种: 多进程的方式
第二种: 多线程的方式
第三种: 异步的方式
11.1.1.1. 多进程的方式
理解:
服务器接收到一个客户端请求时,服务器的主进程会生成一个子进程,这个子进程会和客户端连接并且进行交互,
交互完毕之后 连接断开,这个子进程就结束了 ?
优缺点:
多进程方式的优点在于,设计和实现相对简单,各个子进程之间相互独立,处理客户端请求的过程彼此不受到干 扰,并且当一个子进程产生问题时,不容易将影响漫延到其他进程中,这保证了提供服务的稳定性。当子进程退出 ? 时,其占用资源会被操作系统回收,在资源和时间上会产生一定的额外开销,因此,如果服务器接受大量并发请 求,就会对系统资源造成压力,导致系统性能下降
11.1.1.2. 多线程的方式
理解:
服务器每当接受到一个客户端请求时,会由服务器主进程派生一个线程出来和该客户端进行交互。
?
优缺点:
由于操作系统产生一个线程的开销远远小于产生一个进程的开销,所以多线程方式在很大程度上减轻了web服务器 对系统资源的要求。该方式使用线程进行任务调度,开发方面可以遵循一定的标准,这相对来说比较规范和有利于 协作。但在线程管理方面,该方式有一定的不足。多个线程位于同一个进程内,可以访问同样的内存空间,彼此之 间相互影响
11.1.1.3. 异步的方式
同步: 是指发送方发送请求后,需要等待接收到接收方发回的响应后,才接着发送下一个请求
异步: 发送方发出一个请求后,不等待接收响应这个请求,就继续发送下个请求
?
?
异步的方式也分为2种
?
异步阻塞
异步非阻塞
异步阻塞
发送方向接收方发送请求后,不用等待响应,可以接着进行其他工作;接收方处理请求时进行操作如果不能马上得到结果,就一直等待返回结果后,才响应发送方,期间不能进行其他工作。这种方式在实际中不使用。
异步非阻塞
发送方向接收方发送请求后,不用等待响应,可以继续其他工作;接收方处理请求时进行操作如果不能马上得到结果,也不等待,而是马上返回去做其他事情。当操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。
例如: 在超市排队付账。客户(发送方)向收款员(接收方)付款(发送请求)后在等待收款员找零的过程中,还可以做 其他事情,比如打电话、聊天等;而收款员在等待收款机处理交易(操作)的过程中可以帮助客户将商品打包, 当收款机产生结果后,收款员给客户结账(响应请求),这种方式是发送方和接收方通信效率最高的一种。
nginx 之所以能够处理高并发的情况 主要是 nginx采用的是多线程+异步中(异步非阻塞的方式)处理web请求的。
?
流程:
nginx服务器启动后,会产生一个主进程(master process)和多个工作进程(worker process)(工作进程个数可以指定 例如 worker_processes 5 )。nginx服务器的所有工作进程都用于接收和处理客户端的请求。
每个工作进程使用了异步非阻塞方式,可以处理多个客户端请求。当某个工作进程接收到客户端的请求以后,进行处理,如果不能立即得到结果,就去处理其他的请求而非阻塞;而客户端在此期间也无需等待响应,可以去处理其他的事情;当返回结果时,就会通知此工作进程;该进程得到通知,暂时挂起当前处理的事物,去响应客户端请求。
Nginx的工作模式(或者问Nginx的工作原理)
1: Nginx在启动后,会有一个master进程和多个相互独立的worker进程。
2: master进程接受来自外界的信号,向各个worker进程发送信号,每个worker进程都有可能来处理这个连接。
3: master进程能监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动启动新的worker进程。不 会造成业务的中断。