企业网站是否可以做淘宝客,简约好看的ppt模板免费下载,nas做网站,怎么做一个自己的网页1、Nginx是什么
Nginx#xff08;engine X#xff09;是一个开源的轻量级的HTTP服务器#xff0c;能够提供高性能的HTTP和反向代理服务。与传统的Apache服务器相比#xff0c;在性能上Nginx占用系统资源更小、支持高并发#xff0c;访问效率更高#xff1b;在功能上engine X是一个开源的轻量级的HTTP服务器能够提供高性能的HTTP和反向代理服务。与传统的Apache服务器相比在性能上Nginx占用系统资源更小、支持高并发访问效率更高在功能上Nginx不仅作为Web服务软件还适用于反向代理、负载均衡等场景在安装配置上Nginx更为简单、灵活。Nginx因为并发性能和资源占用上的优势已经广泛用于大中型互联网企业。
1.1 Nginx特点
Nginx具有以下特点 支持高并发Nginx是专门为性能优化而开发的采用内核Poll模型单机能够支持几万以上的并发连接 低资源消耗Nginx采取了分阶段资源分配技术使得CPU与内存的占用率非常低。一般1万个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗几MB内存 高拓展性设计极具扩展性由多个不同功能、不同层次、不同类型且耦合度极低的模块组成 高可用性Nginx支持热部署其中的master管理进程与worker工作进程的分离设计启动速度特别迅速因此可以在不间断服务的情况下对软件版本或者配置进行升级即使运行数月也无需重新启动几乎可以做到7x24小时不间断地运行 丰富的使用场景可以作为Web服务端、HTTP反向代理、负载均衡和前端缓存服务等场景使用 开源协议使用BSD许可协议免费使用且可修改源码
1.2 Nginx使用场景
1.2.1 反向代理
代理服务器一般指代局域网内部的机器通过代理服务发送请求到互联网上的服务器代理服务器一般作用于客户端。代理服务器是介于客户端和Web服务器之间的服务器客户端首先与代理服务器创建连接然后根据代理服务器所使用的代理协议请求对目标服务器创建连接、或则获得目标服务器的指定资源。 正向代理为了从原始服务器取的内容客户端向代理发送一个请求并指定目标Web服务器然后代理向Web服务器转交请求并将获得的内容返回给客户端客户端必须要进行一些特别的设置才能使用正向代理。 像VPN就是正向代理一般在浏览器中配置代理服务器的相关信息。 正向代理中代理的对象是客户端代理服务器和客户端属于同一个LAN对服务器端来说是透明的。
反向代理客户端发送请求到代理服务器由代理服务器转发给相应的Web服务器进行处理最终返回结果给客户端。 像Nginx就是反向代理服务器软件对客户端暴露的其实是一个VIP不是真实的Web服务器的IP。 反向代理的是对象是Web服务器端代理服务器和Web服务端属于同一个LAN对客户端来说是透明的。
使用反向代理的好处是客户端不需要任何配置就可以访问对外暴露的是代理服务器的地址隐藏了真实服务器的地址客户端只需要把请求发送给代理服务器由代理服务器去选择后端的Web服务器获取到数据后再返回给客户端。
1.2.2 负载均衡 负载均衡建立在现有网络结构之上它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡Load Balance其意思就是分摊到多个操作单元上进行执行例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等从而共同完成工作任务。 简而言之单个Web应用服务器不能承受日益增长的并发量请求因此需要不断扩展web服务器来支撑高并发请求根据不同的负载均衡策略将请求分配到各个服务器上。Nginx支持三种不同的负载均衡策略 轮询每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器down掉能够被自动剔除。轮询算法适合服务器配置相当无状态且短平快的服务使用。 weight权重指定轮询的几率weight和后端的访问比例成比例weight权重越高比例越大。通常用于后端服务器配置不均的情况。 ip_hash上面两种算法存在一个问题是就是无法做到会话保持当用户登录到服务器上后第二次请求的时候会被定位到服务器集群中的某一个那么已经登录到某个服务器上的用户会重新定位到另一台之前的登录信息会丢失。ip_hash算法可以解决这个问题当用户再次访问请求时会通过hash算法自动定位到已经登录的服务器上这样每个客户端可以固定在某个web服务器上解决客户端session的问题。 1.2.3 动静分离
动静分离技术是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来将静态文件放在一个单独的web服务器上加快解析速度降低原来单个服务器的压力。在Nginx的配置中在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离静态页面交给Nginx处理动态页面交给PHP-FPM模块或Apache处理。 1.3 Nginx功能模块说明
Nginx由内核和模块组成其中内核在设计上非常简洁完成的工作非常简单仅仅通过查找配置文件将客户端请求映射到一个location block而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
1.3.1 Nginx模块分类
Nginx的模块从结构上分为核心模块、基础模块和第三方模块其中用户根据自己的需要开发的模块都属于第三方模块 核心模块HTTP模块、EVENT模块和MAIL模块 基础模块HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP Rewrite模块 第三方模块HTTP Upstream Request Hash模块、Notice模块和HTTP Access Key模块。 1.3.2 Nginx模块功能 Nginx模块常规的HTTP请求和响应的过程如上图所示Nginx模块从功能上分为以下三类 Handlers处理器模块此类模块直接处理请求并进行输出内容和修改headers信息等操作。Handlers处理器模块一般只能有一个。 Filters过滤器模块此类模块主要对其他处理器模块输出的内容进行修改操作最后由Nginx输出。 Proxies代理类模块此类模块是Nginx的HTTP Upstream之类的模块这些模块主要与后端一些服务比如FastCGI等进行交互实现服务代理和负载均衡等功能。
Nginx本身处理的工作很少当它接到一个HTTP请求时通过查找配置文件将此次请求映射到一个location block而此location中所配置的各个指令则会启动不同的模块去完成工作。 2、Nginx架构解析
2.1 Nginx进程模型 Nginx默认采用多进程工作方式在Nginx启动后会运行一个master进程和多个worker进程。 master主要用来管理worker进程充当整个进程组与用户的交互接口同时对进程进行监护实现worker进程的重启服务、平滑升级、更换日志文件、配置文件实时生效等功能 worker进程用来处理基本的网络事件worker之间是平等的他们共同竞争来处理来自客户端的请求。一个请求只能在一个worker进程中处理一个worker进程不可能处理其它worker进程中的请求。
另外在Nginx架构中还有Cache Loader和Cache Manager进程Cache Loader进程加载缓存索引文件信息Cache Manager进程管理磁盘的缓存大小超过预定值大小后最小使用的数据将被删除。
2.1.1 Master管理进程
Master进程主要用来管理worker进程具体包括如下4个主要功能 接收来自外界的信号 向各worker进程发送信号 监控woker进程的运行状态 当woker进程退出后异常情况下会自动重新启动新的woker进程。
Master进程接受到命令重启Nginx进程./nginx -s reload会按照以下流程
1) 首先master进程在收到重启命令后会先重新加载配置文件然后再启动新的worker进程并向所有老的worker进程发送信号告诉他们可以光荣退休了。
2) 新的worker进程在启动后就开始接收新的请求而老的worker在收到来自master的信号后就不再接收新的请求并且处理完当前进程中的所有未处理完的请求后再退出。
2.1.2 Worker工作进程
Worker工作进程之间是对等的每个进程处理请求的机会也是一样的。Nginx采用异步非阻塞的方式来处理网络事件具体流程如下
1) 接收请求首先每个worker进程都是从master进程fork过来在master进程建立好需要listen的socketlistenfd之后然后再fork出多个worker进程。
a) 所有worker进程的listenfd会在新连接到来时变得可读每个work进程都可以去accept这个socketlistenfd。
b) 当一个client连接到来时所有accept的work进程都会受到通知但只有一个进程可以accept成功其它的则会accept失败。
c) 为保证只有一个进程处理该连接Nginx提供了一把共享锁accept_mutex来保证同一时刻只有一个work进程在accept连接。
d) 所有worker进程在注册listenfd读事件前抢accept_mutex抢到互斥锁的那个进程注册listenfd读事件在读事件里调用accept接受该连接。
2) 处理请求当一个worker进程在accept这个连接之后就开始读取请求解析请求处理请求产生数据后再返回给客户端最后才断开连接。
由上可以看出一个请求完全由worker进程处理并且只在一个worker进程中处理。
2.2 Nginx请求处理流程 Nginx工作进程会监听套接字上的事件accept_mutex和kernel socketsharding来决定什么时候开始工作。事件是由新的连接初始化的这些连接会被分配给状态机Nginx中有三大类状态机处理应用层的HTTP状态机、处理TCP/UDP的4层的传输层状态机和处理邮件的MAIL状态机其中HTTP状态机最为常见。
在多种流量进入Nginx后Nginx的三种状态机在Nginx解析出请求后会动用线程池处理调用将静态资源、反向代理、错误日志等信息分别导向不同的出口比如fastcgi会导向PHP处理、html会导向nginx处理并将处理请求日志记录到本地或远程服务器中。
2.3 Nginx多进程IO模型
2.3.1 Nginx多进程模型
Nginx默认使用多进程的工作方式相比较多线程的方式有以下好处
1) 首先对于每个worker进程来说独立的进程不需要加锁所以省掉了锁带来的开销同时在编程以及问题查找时也会方便很多
2) 其次采用独立的进程可以让进程之间相互不会影响一个进程退出后其它进程还在工作服务也不会中断master进程则很快启动新的worker进程
3) 再次为Nginx热部署提供了支持。在修改配置文件nginx.conf后重新生成新的worker进程新的worker进程会以新的配置处理请求而老的worker进程等把以前的请求处理完成以后kill掉就可以。
2.3.2 Nginx异步非阻塞事件模型
异步非阻塞事件是怎么回事先看一个请求的完整过程首先请求过来建立连接然后再接收数据再发送数据具体到系统层就是IO读写事件。当读写事件没有准备好如果不采用非阻塞的方式就得阻塞调用阻塞调用会进入内核等待导致CPU资源被其它进程占用。当并发请求越大时等待的事件越多CPU利用不上去并发也上不去。因此Nginx使用非阻塞的事件模型系统中事件模型有很多中比如select/poll/kqueue/epoll等Nginx采用epoll模型。Epoll模型基于事件驱动机制可以监控多个事件是否准备完毕如果可以就放入epoll队列这个过程是异步的worker进程只需要从epoll队列循环处理即可。Epoll调用过程如下图所示 3、Nginx部署与配置
3.1 Nginx环境部署
1下载安装包官网链接https://nginx.org/en/download.html
2解压安装包
[roottango-rac01 src]# tar -xzvf nginx-1.22.1.tar.gz
3编译配置
[roottango-rac01 nginx-1.22.1]# ./configure[roottango-rac01 nginx-1.22.1]# make[roottango-rac01 nginx-1.22.1]# whereis nginxnginx: /usr/local/nginx
4启动Nginx
[roottango-rac01 nginx-1.22.1]# cd /usr/local/nginx/[roottango-rac01 nginx]# ./sbin/nginx[roottango-rac01 nginx]# ss -antlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 *:80 *:*
5访问页面ip:80 3.2 Nginx不同场景配置
3.2.1 Nginx配置文件介绍
... #全局块
events { #events块 ...}
http #http块{ ... #http全局块 server #server块 { ... #server全局块 location [PATTERN] #location块 { ... } location [PATTERN] { ... } } server { ... } ... #http全局块} 全局块配置影响nginx全局的指令。一般有运行nginx服务器的用户组nginx进程pid存放路径日志存放路径配置文件引入允许生成worker process数等。 events块配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数选取哪种事件驱动模型处理连接请求是否允许同时接受多个网路连接开启多个网络连接序列化等。 http块可以嵌套多个server配置代理缓存日志定义等绝大多数功能和第三方模块的配置。如文件引入mime-type定义日志自定义是否使用sendfile传输文件连接超时时间单连接请求数等。 server块配置虚拟主机的相关参数一个http中可以有多个server。 location块配置请求的路由以及各种页面的处理情况。
3.2.2 反向代理配置
1简单配置如下 server { keepalive_requests 120; listen 80; server_name 192.168.112.135; location ~ /news/ { proxy_pass http://192.168.112.101:8080; } location ~ /prod/ { proxy_pass http://192.168.112.101:8081; } }
访问http:// 192.168.112.135:80/news/时会跳转到http://192.168.112.101:8080访问http:// 192.168.112.135:80/prod/时会跳转到http://192.168.112.101:8081
3.2.3 负载均衡配置
1配置如下
upstream myServer { server 192.168.112.101:8080 down; server 192.168.112.101:8090 weight2; server 192.168.112.101:6060; server 192.168.112.101:7070 backup; }#指定负载均衡策略为ip_hashupstream myServer { ip_hash server 192.168.112.101:8080; server 192.168.112.101:6060; } down表示当前的server暂时不参与负载 Weight默认为1weight越大负载的权重就越大。 max_fails允许请求失败的次数默认为1当超过最大次数时返回proxy_next_upstream 模块定义的错误 fail_timeoutmax_fails 次失败后暂停的时间。 Backup其它所有的非backup机器down或者忙的时候请求backup机器。所以这台机器压力会最轻。
3.2.4 动静分离配置
1配置如下 server { listen 10000; server_name localhost; #拦截后台请求 location / { proxy_pass http:// 192.168.112.101:8888; proxy_set_header X-Real-IP $remote_addr; }#拦截静态资源 location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ { root /static/; autoindex on; } }
上述配置中访问静态资源在根目录的/static/下。 4、总结
Nginx作为开源的轻量级的HTTP服务器广泛应用于分布式应用架构中。本文介绍了Nginx的特点及使用场景、Nginx的进程模型和请求处理流程并结合不同场景进行配置对Nginx的架构和实现原理可以有一个更深入的了解。