本篇文章会Nginx得相关概念、安装使用、官网文档解析、基于反向代理的负载均衡策略 这几个点去解析Nginx,保证对Nginx有个大的认识。
简介 高并发分流 单台服务器无法满足当前业务场景下,既然无法满足,则使用多个服务器进行解决,就是集群产生;怎么样去分配来的业务请求,这就是如何进行解决高并发分流的问题,出现的负载均衡的框架; 分流限流 、多读写少用缓存,写多读少用缓冲。 分流的技巧、分而治之的思想。因为这个思想才出现了nginx框架的出现。 概述 一个俄国人用 语言编写的,开源的高性能的HTTP和反向代理服务软件,同时也提供 了IMAP/POP3/SMTP服务。Nginx是一款 轻量级的 Web 服务器/ 反向代理服务器及 电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少, 并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好。 Nginx主要应用于静态资源服务,反向代理服务、API服务- 静态资源主要借助于服务器本地文件系统来完成
- 反向代理可以做到 Nginx强大的性能、缓存、负载均衡
- API服务通过集成niginx_lua模块来实现,比如OpenResty就是用niginx和lua集成特性,整合了大量常用的第三方模块 ,以及js脚本
- 高并发、高性能 基于NIO非阻塞事件模型处理网络请求, slab内存管理机制。
- 可扩展性好 核心模块 扩展模块 第三方插件,丰富的模块及第三方插件是 nginx生命力顽强的原因。
- 高可靠性 部署后常年稳定运行
- 热部署 无需启动,更新配置文件
nginx: download进入Nginx下载页面;
选择 nginx/Windows-xxx.zip 的安装包下载, xxx 表示最新的版本 解压 zip 到你的程序安装目录 进入 nginx-xxx 目录,双击 nginx.exe 启动 Nginx 服务 linux安装 linux 下面有两种安装方式,二进制安装、通过源码编译安装。 二进制安装- 检查更新yum依赖
# 检查更新yum依赖 sudo yum install yum-utils
- 添加yum的nginx仓库地址
- 安装nginx,也可以直接使用该命令进行安装
sudo yum install nginx通过源码编译安装 通过源码编译安装,能够集成一些默认没有安装的模块以及第三方插件。下面我们来编译一个携带 ssl 和 echo模块的 Nginx 。
yum install -y gcc # GCC编译器,用来编译C语言程序 yum install -y gcc-c++ # C++编译器,用来编译C++语言程序 yum install -y pcre pcre-devel # Perl库兼容正则表达式,Nginx的HTTP模块要靠它来解 析正则表达式 yum install -y zlib zlib-devel # zlib库,用于对HTTP包的内容做gzip格式的压缩 yum install -y openssl openssl-devel # OpenSSL开发库,用于Http的SSL协议,需要源码 编译# 统一执行前面的命令 sudo yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl- develNginx 需要通过 openssl 源码库来进行安装 ssl 协议,下载 openssl 源码,并解压
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz # 下载 openssl tar -xzvf OpenSSL_1_0_2k.tar.gz # 解压openssl wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz tar -xzvf v0.61.tar.gz配置编译选项 编译安装,通过 confifigure 文件来操作,用于一些特殊需求、特殊依赖的安装方式,操作也不是那么难。可以 参考官网 ,也可以参考 confifigure 的帮助文档。 先了解目录内容,进入 Nginx 目录,输入 ls 查看文件内容如下图,里面有一个 confifigure 可执行文件
在当前默认输入下面命令,就可以看到对应的帮助文档
./configure --help--without/--with 命令,它好比我们的 maven 资源管理,在父项目的 pom 中定义好了依赖的资源,子项 目如果需要使用通过引用即可。 confifigure 命令做了大量的 “ 幕后 ” 工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目 录的生成以及根据各种参数生成一些C 源码文件、 Makefifile 文件等。 执行编译
sudo makemake 命令根据 confifigure 命令生成的 Makefifile 文件编译 Nginx 工程,并生成目标文件、最终的二进制文件 安装
sudo make installmake install 命令根据 confifigure 执行时的参数将 Nginx 部署到指定的安装目录,包括相关目录的建立和 二进制文件、配置文件的复制。 nginx核心 Nginx常规操作
使用 sudo ./nginx -h 查看 配置文件 配置文件等等。
包括sudo ./nginx -s reload 热更新配置文件等等。 其他命令。sudo ./nginx -v 查看版本信息等等。Nginx的配置文件
Nginx有一个非常强大的配置文件,可以配置应用对应的模块指令,类似Perl 语法风格。配置文件指令主 要分为两大块:简单指令、块指令..
- 简单指令
- 块指令
将某些文件 不用放到服务器上去,降低服务器压力
Nginx的配置热更新nginx如何做到配置文件热更新?
- master检查配置文件的正确性,若是错误则返回错误 信息, nginx继续用原配置文件进行工作
- nginx启动新的worker进程,采用新的配置文件
- nginx将新的请求分配新的worker进程
- nginx等待以前的worker进程的全部请求已经都返回后, 关闭相关 worker进程
- 重复上面过程,直到全部旧的 worker进程都被关闭掉
master process 和worker process 两种进程。 分别做不同的工作,这里自动启动。全部请求已经都返回后, 关闭相关 worker进程,如果不保证关闭则会出现服务异常的。
官方文档nginx documentation
文档主要有:首页、关于、下载页面、安全、使用文档、 fap、博客等部分;blog商业信息。作为开发人员,主要关注,下载页面、使用文档、博客这几个部分。其中使用 文档和博客是最为重要的内容。 博客 中涉及一些高级的特性和商业支持。 使用文档 包含, Nginx常规操作介绍、 功能场景操作、贡献提交源代码、 Nginx模块参考。 常规操作 包含如何编译安装 Nginx、初学者指南、管理员指南、 Nginx操作、 Nginx的连接处理事件类型、等信息。 功能场景配置 一般只有在对应的功能场景下使用配置,例如负载均衡反向代理、 Https服务 在文档中模块介绍,包括所有的处理。 Nginx模块 Nginx 整体设计采用:微核心模块 插件形式 很多优秀的开源组件都在采用这样的设计思想,为第三方扩展提供了强大的支撑。 也是 Nginx 受欢迎的原因之一。
核心模块常用指令
核心功能指令
微核心,包含 user use events,这些核心部分。都比较重要的部分,在官方文档中存在着。都是块指令。
http核心指令 要在 其中选择 对应的核心模块进行了解。
Location 最常用又最容易弄错的 Location指令,它可以由 前缀字符串 或 正则表达式 定义
这样进行匹配起来,字符类型的。
Location匹配规则 当一个请求过来时候, location怎么进行匹配? 首先 nginx检查使用了前缀字符串定义的 location指令块 选中并记住具有最长匹配前缀的 location指令块 如有 ^~匹配,则不查找正则表达式,使用该location 然后 按照它们在配置文件中的出现顺序检查正则表达式 正则表达式的搜索在第一次匹配时终止,并使用相应的配置 如果未找到与正则表达式的匹配,则使用先前记住的最长匹配前缀位置的配置 最后 还没有找到? 接盘侠/ 实现高并发分流单台服务器qps是有限的,提升请求速率;解决办法采用集群的方式。而分布式集群则需要使用到负载均衡。
Nginx负载均衡负载均衡涉及的模块
upstream http_upstream 模块定义一组服务,能被proxy_pass指令引用。 upstream name{......} 在http指令块中,定义一组可以进行负载均衡的上游服务器,并给取个 组名。服务可以是不同的端口、 TCP、UNIX域名套接字。 类似socket套接字 通过 upstream,就能为成千上百台的后端服务集群提供强有力的支撑,反向代理负载均衡功能。 proxy_pass 表示将请求传递到另外一个服务,类似正向代理,代理到某个服务上。 nginx负载均衡策略



