Nginx 之 初探

news/2024/7/10 2:46:22 标签: Nginx, Web服务器, 负载均衡, 反向代理, Web缓存

欢迎大家扫码关注我的微信公众号:
数据之恋

Nginx 初探-目录

  • 一、概述
  • 二、Nginx 的功能特性
    • 2.1 基本 HTTP 服务
    • 2.2 高级 HTTP 服务
    • 2.3 邮件代理服务
  • 三、常用功能介绍

一、概述

目前, 全球主流Web服务器主要有: Apache、 Microsoft IIs、 Tomcat、 Lighttpd等。 其中, 前两者属于大型的 Web服务器, 后两者属于轻量级的 Web 服务器。 今天我们要介绍的也是一款轻量级 Web 服务器——Nginx

Nginx 是一个高性能的HTTP和反向代理服务, 也是一个IMAP/POP3/SMTP服务。 Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开发的, 第一个公开版本0.1.0发布于2004年10月4日。
其将源代码以类BSD许可证的形式发布, 因它的稳定性、 丰富的功能集、 示例配置文件和低系统资源的消耗而闻名。 2011年6月1日, nginx 1.0.4发布。

Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个 BSD-like 协议下发行。 其特点是占有内存少, 并发能力强, 事实上 nginx 的并发能力确实在同类型的网页服务器中表现较好, 中国大陆使用 nginx 网站用户有: 百度、 京东、 新浪、 网易、 腾讯、 淘宝等。(摘自百度百科)

Nginx__11">二、Nginx 的功能特性

Nginx 服务器以其功能丰富著称于世。 它可以作为 HTTP 服务器, 也可以作为反向代理服务器或者邮件服务器; 能够快速响应静态页面(HTML)的请求; 支持 FastCGI、 SSL、 Virtual Host、 URL Rewrite、 HTTP Basic Auth、 Gzip 等大量使用功能; 并且支持更多的第三方功能模块的扩展。

Nginx 提供的基本功能服务从大体上归纳为: 基本 HTTP 服务、 高级 HTTP 服务和邮件服务等三大类。

2.1 基本 HTTP 服务

Nginx 提供的基本 HTTP 服务中, 主要包含以下功能特性:

  1. 处理静态文件(如 HTML 静态网页及请求); 处理索引文件以及支持自动索引;
  2. 打开并自行管理文件描述符缓存;
  3. 提供反向代理服务, 并且可以使用缓存加速反向代理, 同时完成简单负载均衡及容错;
  4. 提供远程 FastCGI 服务的缓存机制, 加速访问, 同时完成简单的负载均衡及容错;
  5. 使用 Nginx 的模块化特性提供过滤器功能。 Nginx 基本过滤器包括 gzip 压缩、 ranges 支持、 chunked 响应、 XSLT、 SSI 以及图像缩放等。 其中, 针对包含多个 SSI 的页面, 经由 FastCGI 或反向代理, SSI 过滤器可以并行处理;
  6. 支持 HTTP 下的安全套接层安全协议 SSL。

2.2 高级 HTTP 服务

Nginx 提供的高级 HTTP 服务中, 主要包含以下功能特性:

  1. 支持基于名称和 IP 的虚拟主机设置;
  2. 支持 HTTP/1.0 中的 KEEP-Alive 模式和管线(PipeLined)模型连接;
  3. 支持重新加载配置以及在线升级时, 无须中断正在处理的请求;
  4. 自定义访问日志格式、 带缓存的日志操作以及快速日志轮转;
  5. 提供 3xx~5xx 错误代码重定向功能;
  6. 支持重写(Rewrite)模块扩展;
  7. 支持 HTTP DAV 模块, 从而为 HTTP WebDAV 提供 PUT、 DELETE、 MKCOL、 COPY 以及 MOVE 方法;
  8. 支持 FLV 流和 MP4 流传输;
  9. 支持网络监控, 包括基于客户端 IP 地址和 HTTP 基本认证机制的访问控制、 速度限制、 来自同一地址的同时连接数或请求数限制等;
  10. 支持嵌入 Perl 语言。

2.3 邮件代理服务

Nginx 提供的邮件代理 服务中, 主要包含以下功能特性:

  1. 支持使用外部 HTTP 认证服务器重定向用户到 IMAP/POP3 后端, 并支持 IMAP 认证方式和 POP3 认证方式;
  2. 支持使用外部 HTTP 认证服务器认证用户后重定向连接到内部 SMTP 后端, 并支持 SMTP 认证方式;
  3. 支持邮件代理服务下的安全套接层安全协议 SSL;
  4. 支持纯文本通信协议的扩展协议 STARTTLS。

三、常用功能介绍

3.1 HTTP 代理和反向代理

代理服务和反向代理服务是 Nginx 服务器作为 Web 服务器的主要功能之一。 在提供反向代理方面, Nginx 服务器转发前端请求的性能稳定, 并且后端转发与业务配置相互分离, 配置相当灵活。

在进行 Nginx 服务器配置时, 配置后端转发请求完全不用关心网络环境如何, 可以指定任意的 IP 地址和端口号, 或其他类型的链接、 请求等。

3.2 负载均衡

一般来说, 负载均衡包含两方面: 第一, 将单一的重负载分担到多个网络节点上做并行处理, 每个节点处理结束后将结果汇总返回给用户, 这样可以大幅提高网络系统的处理能力; 第二, 将大量的前端并发访问或数据流量分担到多个后端网络节点上分别处理, 这样可以有效的减少前端用户等待响应的时间。

我们遇到的大多数网络应用方面的负载均衡问题, 基本都隶属于第二方面的范围。

Nginx 服务器的负载均衡策略可以分为两大类: 内置策略和扩展策略。其中内置策略主要包含轮询、 加权轮询和IP hash 三种; 扩展策略主要通过第三方模块实现, 常见的有 url hash 和 fair 等。

  1. 轮询策略: 将每个前端请求按顺序(时间顺序或者排列次序)逐一分配到不同的后端节点上, 对于出现问题的后端节点自动排除;
  2. 加权轮询策略: 就是在基本的轮询策略上考虑各后端节点接收请求的权重, 指定各后端节点被轮询到的几率。 主要用于后端节点性能不均的情况, 根据后端节点性能的实际情况, 我们可以在 Nginx 服务器的配置文件中调整权值, 使得整个网络对前端请求达到最佳的响应能力。
  3. IP hash策略: 将前端的访问 IP 进行 hash 操作, 然后根据 hash 的结果将请求分配给不同的后端节点。 事实上, 这种策略可以看做是一种特殊的轮询策略。 通过 Nginx 的实现, 每个前端访问 IP 会固定访问一个后端节点。 好处: 避免考虑前端用户的 session 在后端多个节点上共享的问题。
  4. url hash 策略: 类似于 IP hash, 只不过是将 url 进行 hash。 缺点是: 如果后端节点出现异常, 它不能自动排除该节点, 而报出 503 错误。
  5. fair 策略: 将前端请求转发到一个最近负载最小的后台节点。 如何判断负载最小? Nginx 通过后端节点对请求的响应时间来判断负载情况, 响应时间短的节点负载相对就轻。

3.3 Web 缓存

Nginx 服务器具备 Web 缓存加速功能和清除指定 URL 缓存的功能; 同时, Nginx 服务器对多核 CPU 的调度性能也很高, 使 Nginx 可以同时作为负载均衡服务器和 Web 缓存服务器来使用。


http://www.niftyadmin.cn/n/732624.html

相关文章

Python 之 字典合并的几种方式

欢迎大家扫码关注我的微信公众号: Python 之 字典合并的几种方式-目录一、什么是字典二、字典合并的几种方式2.1 for 循环的方式2.2 dict(a, **b) 的方式2.3 dict(a.items() b.items()) 的方式2.4 dict.update(other_dict) 的方式一、什么是字典 字典是一种可变的…

python index函数是左闭右开吗_为什么 Python 的 Range 要设计成左开右闭区间?

Python 的 Range 是左开右闭的&#xff0c;而且除了 Python 的 Range&#xff0c;还有各种语言&#xff0c;如 Swift 语言的 ..< 运算符之类的也有类似这样的设计。关于 Range 为什么要这样设计这个问题&#xff0c;Edsger W. Dijkstra 在1982年写过一篇短文章分析了一下其中…

python判断字符类型例题_python-数据类型练习题1

1、有变量name "aleX leNb" 完成如下操作&#xff1a; 移除name变量对应的值两边的空格,并输出处理结果 n1 name.strip() print(n1) 结果&#xff1a;aleX leNb 移除name变量左边的al并输出处理结果 n2 name.lstrip(al) print(n2) 结果&#xff1a;eX leNb 移除na…

Nginx 之一 服务器的安装部署(一): LInux 环境下 Nginx 服务器的安装和基本配置

欢迎大家扫码关注我的微信公众号&#xff1a; Nginx 服务器的安装部署&#xff08;一&#xff09;-目录一、编译和安装前的准备工作1.1 足够的磁盘空间1.2 需要的工具二、Nginx 软件的自动脚本三、Nginx 源代码的编译和安装一、编译和安装前的准备工作 本博客依赖环境&#x…

js 上传文件_js精准判断上传文件类型

前言一般来说&#xff0c;对于上传的文件&#xff0c;都要做类型过滤&#xff0c;指定哪些类型能上传&#xff0c;哪些不能上传。最容易想到的&#xff0c;也是相对常用的&#xff0c;是直接使用文件的拓展名。但拓展名可以手动修改&#xff0c;做不到精准&#xff0c;比如把一…

Python Cookbook 之一 数据结构和算法(一): 将序列分解为单独的变量

欢迎大家扫码关注我的微信公众号&#xff1a; 将序列分解为单独的变量-目录一、问题二、解决方案三、讨论一、问题 一个包含 N 个元素的元组或序列&#xff0c; 现在想将它分解为 N 个单独的变量。 二、解决方案 任何序列&#xff08;或可迭代对象&#xff09;都可以通过一…

Python Cookbook 之一 数据结构和算法(二): 从任意长度的可迭代对象中分解元素

欢迎大家扫码关注我的微信公众号&#xff1a; 从任意长度的可迭代对象中分解元素一、问题二、解决方案2.1 * 表达式在首位2.2 * 表达式在中间2.3 * 表达式在末位三、讨论一、问题 需要从某个可迭代对象中分解出 N 个元素&#xff0c; 但是这个可迭代对象的长度可能超过 N&…

Nginx 之一 服务器的安装部署(二): Nginx 服务的启停控制

欢迎大家扫码关注我的微信公众号&#xff1a; Nginx 服务器的安装部署&#xff08;二&#xff09;-目录一、Nginx 服务的信号控制1.1 获取 Nginx 服务主进程 PID1.2 Nginx 服务可接收的信号二、Nginx 服务的启动三、Nginx 服务的停止3.1 停止方式一&#xff1a;3.2 停止方式二…