Nginx 笔记

1 篇文章 0 订阅

一. Nginx基本概念
1. Nginx 是什么?可以做什么?
  • Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP, POP3, SMTF 等服务。
  • Nginx 是一个跨平台服务器,可以运行在 Linux, Windows, FreeBSD, Solaris, AIX, Mac OS等操作系统上。
  • Nginx 支持热加载 热部署 ,在不打断用户请求的情况下更新版。
  • 百度,京东,新浪,网易,淘宝均用了 Nginx。

2. Nginx 原理是什么?
  • Nginx 采用了高度模块化的设计思路,并且内部的进程主要有两类:master 进程 和 worker 进程。其中master进程只有一个,worker进程可以有多个。
  • worker进程才是真正working的进程,才是真正处理请求的进程。worker 进程全部都是 master 进程的子进程。worker 进程是以普通用户的身份进行运行的,这样就可以极大增加程序的安全性。就算是万一有一个进程被劫持,那也不会有管理员权限。
  • Nginx 的热部署和其并发模型有着密不可分的关系。说白了,就是因为 master 进程的关系。当通知 ngnix 重读配置文件的时候,master 进程会进行语法错误的判断。如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么 ngnix 也不会将新的配置调整到所有 worker 中。而是,先不改变已经建立连接的 worker,等待 worker 将所有请求结束之后,将原先在旧的配置下启动的 worker 杀死,然后使用新的配置创建新的 worker

3. 一个 master,多个 worker 进程的好处是什么?
  • ①:可以进行热部署,修改完配置文件之后,不需要重新启动,采用重新加载./nginx -s reload命令既可以重新加载配置文件。即不需要暂停服务就可以平滑升级系统。
  • ②:首先,对于每一个worker_process来说,独立的进程,不需要加锁,所以省掉了锁带来的开销;同时在编程以及查找问题时,也会方便很多。其次,采用独立的进程,可以相互之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master_process进程可以给很快启动新的worker_process
  • ③:当然,worker_process进程的异常退出肯定是程序有bug,异常退出会导致当前worker上的所有请求处理失败,不过不会影响所有的请求,因为其他的worker还在正常工作,所以降低了风险。

4. 一个请求占用了多少个 worker_connection 的连接数?
  • 两个或者四个
  • 如果只访问静态资源,则“一来一回”,占用两个worker_connection
  • 如果还有访问动态资源,则“二来二回”,占用四个worker_connection
  • 据此可以算出系统可以承受的最大并发量(最大并发请求数量)。

5. 需要设置多少个 worker 进程?
  • worker数和CPU数相等时最适宜的。
  • Nginx 采用的是I/O 多路复用机制,每个worker都是一个独立的进程,且每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是成千上万的请求也没有问题,每个worker的线程可以把一个CPU的性能发挥到极致,所以,worker数和CPU数相等时最为适宜的,设置少了会浪费CPU,设置多了会造成CPU频繁的上下文切换,这会带来额外的开销。

二. Nginx 反向代理
1. 正向代理以及反向代理概念
  • 正向代理:在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问就是正向代理。
  • 反向代理:我们(客户端)将请求发送到代理服务器,由代理服务器去选择目标服务器,或获取数据后再返回给客户端,此时代理服务器和目标服务器就是一个整体,我们感受不到代理服务器的存在,暴漏的是代理服务器的地址,隐藏了真实目标服务器的 IP 地址。
  • 或者这样说:反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

2. 反向代理优点
  • 安全性:对外暴漏的是代理服务器的地址,隐藏了真实目标服务器的 IP 地址。
  • 速度快:配合动静分离技术以及负载均衡技术来使用,可以使高并发条件下系统的响应速度以及稳定性大大提高。

3. 反向代理配置实例

三. Nginx 负载均衡
1. 负载均衡概念
  • 背景:来自客户端的访问量日益增大,单个服务器解决不了高并发请求,这时我们可以增加服务器的数量,然后将请求根据不同的策略分发到不同的服务器上,即将负载分发到不同的服务器上,即我们所说的负载均衡。

2. 负载均衡配置实例

3. 负载均衡策略
  • ①:默认是轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果某一后端服务器当掉,则将请求发送到另外的服务器,并自动剔除宕掉的服务器。
  • ②:通过weight = n 分配转发权重:权重默认为1,权重越大,分配到的客户端请求越多。
  • ③:通过ip_hash分配客户端请求:每个请求按访问iphash结果分配处理请求的后端服务器,这样每个访客固定一个后端服务器,即可以解决Session问题。
  • ④:通过fair(第三方模块)来分配请求:但后端服务器的响应时间来分配请求,响应时间短的优先分配。

四. Nginx 动静分离
1. 动静分离概念
  • 即分开动态请求和静态请求
  • 可以理解为用 Nginx 处理静态页面,Tomcat 处理动态页面。

2. 动静分离分类
  • 动静分离从实现角度来讲大致分为两类
  • ①:一种是把静态文件单独成独立的域名,放在独立的服务器上,这也是目前主流推崇的方案。
  • ②:一种是动态文件和静态文件混合在一发布,通过 Nginx 来分开。
动态请求
静态请求
html, css, image
数据库查询
Client
Nginx
静态资源服务器
Tomcat 服务器
  • 上图省略了响应

3. 动静分离配置实例

五. Nginx 高可用
1. 什么是Nginx 高可用?
2. 高可用配置实例

六. Nginx 常用的操作命令
1. Nginx 常用命令
  • 使用 Nginx 命令的前提:必须进入 Nginx 目录:cd usr/local/nginx/sbin
  • 常用命令:
  • ①:查看 Nginx 的版本:./nginx -V
  • ②:启动 Nginx:./nginx
  • ③:关闭 Nginx:./nginx -s stop
  • ④:不关闭重新加载 Nginx:./nginx -s reload

2. Nginx 热部署(平滑升级)
  • 当通知 ngnix 重读配置文件的时候,master 进程会进行语法错误的判断。如果存在语法错误的话,返回错误,不进行装载;如果配置文件没有语法错误,那么 ngnix 也不会将新的配置调整到所有 worker 中。而是,先不改变已经建立连接的 worker,等待 worker 将所有请求结束之后,将原先在旧的配置下启动的 worker 杀死,然后使用新的配置创建新的 worker。

七. Nginx 配置文件详解
1.1 配置文件整体结构

{ 全 局 块 e v e n t s   块 h t t p   块 \left\{ \begin{aligned} 全局块 \\ events\ 块 \\ http\ 块 \end{aligned} \right. events http 


http 块结构:

{ h t t p 全 局 块 s e r v e r   块 1 s e r v e r   块 2 . . . s e r v e r   块 n \left\{ \begin{aligned} http 全局块 \\ server\ 块_1\\ server\ 块_2\\ ...\\ server\ 块_n\\ \end{aligned} \right. httpserver 1server 2...server n


server 块结构:
{ s e r v e r 全 局 块 l o c a t i o n   块 1 l o c a t i o n   块 2 . . . l o c a t i o n   块 n \left\{ \begin{aligned} server 全局块 \\ location\ 块_1\\ location\ 块_2\\ ...\\ location\ 块_n \end{aligned} \right. serverlocation 1location 2...location n

  • 即:每个 http 块可以有多个server 块
  • 每个 server 块可以有多个location 块

1.2 全局块
  • 全局块主要设置一些影响Nginx服务器整体运行的配置命令,比如:
  • 设置运行Nginx服务器的用户(组);
  • 允许生成的最大wprker_process数;
  • 进程PID存放路径;
  • 日志类型和日志存放路径 ;
  • 配置文件的引入等。
  • 其中,worker_process数越大,可以支持的并发处理量也越大,但会收到硬件,软件等设备的制约。

1.3 events 块
  • events块涉及的配置指令主要影响Nginx服务器于用户的网络连接,常用的设置包括:
  • 是否开启对多worker_process下的网络连接进行序列化;
  • 是否允许同时接收多个网络连接;
  • 选取哪种事件驱动模型来处理连接请求;
  • 设置每个worker_process可以同时支持的最大连接数等。
  • 这部分的配置对于Nginx性能的影响较大,在实际应用中应该灵活配置。

1.4 http 块
  • 代理,缓存和日志定义等绝大多数功能和第三方模块的配置都在这里。
  • Nginx 服务器中配置最频繁的部分。
  • http 块下也包含 http 全局块server 块

2. http 块详解
2.1. http 全局块
  • http 全局块配置的指令包括文件引入,MIME-TYPE定义,日志定义,连接超时时间的设置,单链接请求数上限等。
2.2. server 块
  • 这部分和虚拟主机有密切关系;
  • 虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本问题。
  • 每个 http 块可以包括多个 server 块,而每个 server 块就相当于一台虚拟主机。

3. server 块详解
3.1. 全局 server 块
  • 最常见的配置是本虚拟主机的监听配置和本虚拟机的名称或 IP 配置。
3.2. location 块
  • 一个 server 块可以包括多个 location 块。
  • 这块的作用是处理 Nginx 服务器接收到的请求字符串(例如:server_name/uri_string);
  • 对虚拟主机名称(也可以是 IP 别名)之外的字符串(例如:uri_string)进行匹配,对特定的请求进行处理,地址定向,数据缓存以及应答控制等功能。
  • 还有许多第三方模块的设置也在这里。

4. location 块正则表达式
  • ①:精确匹配=

    location = /index {
    	configration A
    }
    
  • URL 执行http://{dimain_name}/index时,才会执行配置中的操作。


  • ②:波浪号~

  • 波浪号~表示执行正则匹配,但区分大小写

    location ~/page/\d{1,2} {
    	configuration B
    }
    
  • URL 为http://{domain_name}/page/num,且num是1~99时执行配置中的操作。


  • ③:波浪号与星号~*

  • 波浪号与星号~*表示执行正则匹配,但是不区分大小写

    location ~*/\.(jpg|jpeg|gif) {
    	configration C
    }
    
  • 匹配所有 URL 以.jpg.jpeg.gif结尾时生效,执行配置中的操作。


  • ④:脱字符^和波浪号~
  • 表示执行正则匹配,前缀匹配成功则配置生效
    location ^~/image/ {
    	configration D
    }
    
  • URL 为http://{domain_name}/iamge/xxxx生效,执行配置中的操作。

  • ⑤:艾特号@

  • 用于定义一个location,用于处理内部重定向。

    location @error {
    	proxy_pass http://error;
    }
    error_page 404 @error;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值