nginx简介(一)

2023-05-16

背景:

        前面说了准备围绕运维工程师所要学习的知识进行记录和分享,linux基础的记录是一个漫长的过程,后面会时不时的记录下。今天准备拉一个分支,介绍一下nginx的相关内容,由于nginx的内容太过丰富,那我们就从一篇简单的介绍开始把....

 一.  nginx介绍

         Nginx是一款轻量级的Web 服务器/反向代理服务器/正向代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler使用。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。

二.  nginx的基础架构

         nginx运行时,在lLinux系统中以daemon形式在后台运行,后台进程包含一个master进程和多个worker进程。Nginx以多进程形式工作,也支持多线程方式,但nginx默认采用多进程方式,也是主流方式。

cc383d990d0342889e11ab433ff9bc1c.png

 1.1   nginx多进程模式:

 多进程模式,会有一个master进程和多个worker进程。

Master进程管理worker进程,包括

(1)接收来自外界的信号;

(2)向各worker进程发送信号;

(3)监控work进程状态;

(4)当worker退出后(异常情况下),自动重新启动新worker进程。

(5)读取nginx的配置文件,判断配置文件的语法等等功能。

多个worker进程之间对等,竞争来自客户端的请求,一个请求,只会在一个worker中处理,一个worker进程不会处理其他进程的请求。

Worker进程个数的设置,一般设置与机器cpu核数一致。(可以在nginx.conf的配置文件中进行设置worker_ processes 1)

work的进程的功能:

(1)接收master进程下发的指令,执行任务。

1.2  nginx进程模式的好处:

(1)每个worker进程相互独立,无需加锁,节省锁开销;

(2)采用独立的进程,不会相互影响,一个进程退出,其他进程服务不会中断;

(3)Worker异常退出,会导致当前worker上的所有请求失败,不过不会影响所有请求,降低了风险。

 (4)多进程模式对并发的支持,每个worker只有一个主线程,采用异步非阻塞方式来处理请求,使得nginx可以同时处理成千上万个请求。相比Apache,每个请求会独占一个工作线程,并发上千时,就同时有几千的线程在处理请求,线程带来的内存占用很大,线程的上下午切换带来的cpu开销也大,性能就上不去了。

1.3. 异步非阻塞:

(1)异步的概念和同步相对的,也就是不同事件之间不是同时发生的。

(2)非阻塞的概念是和阻塞对应的,阻塞是事件按顺序执行,每一事件都要等待上一事件的完成,而非阻塞是如果事件没有准备好,这个事件可以直接返回,过一段时间再进行处理询问,这期间可以做其他事情。但是,多次询问也会带来额外的开销。

三.    nginx的优缺点

1.  优点:

 1.高并发量:根据官方给出的数据,能够支持高达 50,000 个并发连接数的响应。

 2.内存消耗少:处理静态文件,同样起web 服务,比apache 占用更少的内存及资源,所有它是轻量级的。

 3.简单稳定:配置简单,基本在一个conf文件中配置,性能比较稳定,可以7*24小时长时间不间断运行。

4.模块化程度高:Nginx是高度模块化的设计,编写模块相对简单,包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter,支持 SSL 和 TLSSNI。

5.支持Rwrite重写规则:能够根据域名、URL的不同, 将HTTP请求分发到不同的后端服务器群组。

6.低成本:Nginx可以做高并发的负载均衡,且Nginx是开源免费的,如果使用F5等硬件来做负载均衡,硬件成本比较高。 

7.支持多系统:Nginx代码完全用C语言从头写成,已经移植到许多体系结构和操作系统,包括:Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows,由于Nginx是免费开源的,可以在各系统上编译并使用。

2.  缺点:

1.动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。

2.rewrite弱:虽然nginx支持rewrite功能,但是相比于Apache来说,Apache比nginx 的rewrite 强大。

四.  nginx的常用功能

 1.  正向代理:

         代理对象为客户端做代理,客户端无法直接访问服务端,需要通过配置代理对象才可以访问;而服务端只需要与代理对象打交道,不需要感知客户端的存在。 

 

 2.   反向代理:

     代理对象为服务端,反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

f1f4def4b3b24a6fb24345792adc9605.png

3.   负载均衡

(实际上负载均衡的功能就是在反向代理之上的)

       nginx反向代理服务器接收到的请求数量,就是我们说的负载量请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则所以~将服务器接收到的请求按照规则分发的过程。其中负载均衡就分为硬件负载(f5硬件)和软件负载(nginx,lvs,haproxy等)

(1)weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

(2)fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

(3)url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。

(4)Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

4.  web服务器

        nginx做web服务器,还功能跟apache的功能一致,可以通过定义server来创建多个web服务。

nginx的架构,功能基本上就是这些,可能总结的不足,望指导。后面会在nginx的系列中从nginx的安装,基本的web服务,再到代理一步步去说。

本文使用的图片和概念均来自与百度百科,如有侵权,请联系我删除。

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nginx简介(一) 的相关文章

  • 如何在 Docker 容器中运行 Nginx 而不停止?

    我在 Docker 容器上安装了 Nginx 并尝试像这样运行它 docker run i t p 80 80 mydockerimage usr sbin nginx 问题是 Nginx 的工作方式是 初始进程立即生成一个 Nginx 主
  • airflow webserver 命令失败并显示 {filesystemcache.py:224} 错误 - 不允许操作

    我正在 Cent OS 7 上安装 Airflow 我已经配置了 Airflow db init 并检查了 nginx 服务器的状态及其工作正常 但是当我运行airflow webserver命令时 我收到下面提到的错误 2021 03 2
  • 为什么在生产中得到空 CSS 文件?

    我在文件中放入了很多css文件active admin css scss Active Admin s got SASS import active admin mixins import active admin base import
  • 如何设置带有子域和反向代理且不使用启用站点的 nginxconf?

    我读到没有必要使用sites enabled https stackoverflow com questions 41303885 nginx do i really need sites available and sites enabl
  • Nginx 正在向 uWSGI 发出非常旧的请求?

    我看到一种奇怪的情况 Nginx 或 uwsgi 似乎正在建立一个很长的传入请求队列 并在客户端连接超时后很长时间内尝试处理它们 我想理解并停止这种行为 以下是更多信息 My Setup 我的服务器使用 Nginx 通过 Unix 文件套接
  • nginx - 记录 SSL 握手失败

    我正在运行启用了 SSL 的 nginx 服务器 我的协议 密码设置相当安全 我已经在 ssllabs com 上检查过它们 但是 因为这是一个由我无法控制的 http 客户端调用的 Web 服务 所以我担心兼容性 重点是 有没有办法在我的
  • 我怎样才能重写这个nginx“if”语句?

    例如 我想这样做 if http user agent MSIE 6 0 http user agent MSIE 7 0 etc etc rewrite ROOT ROOT ancient last break 而不是这个 if http
  • kubernetes nginx ingress 无法将 HTTP 重定向到 HTTPS

    我有一个托管在 Google Cloud 平台中的网络应用程序 该应用程序位于负载均衡器后面 而负载均衡器本身位于入口后面 入口设置了 SSL 证书 并按预期接受 HTTPS 连接 但有一个问题 我无法让它将非 HTTPS 连接重定向到 H
  • 如何在位置中使用 Nginx Regexp

    Web 项目将静态内容放入 some content img 文件夹中 url规则为 img some md5 但文件夹中的位置 content img 前两位数字 Example url example com img fe5afe048
  • 找不到 NGINX brew 安装命令

    I do brew install nginx and get gt Downloading http nginx org download nginx 1 2 2 tar gz Already downloaded Library Cac
  • 常规请求期间 Django AJAX 请求未通过

    我有一个带有登录网页的 Django 站点 当提交页面上的登录表单时 它会执行登录视图 该视图会在其中运行一个需要很长时间处理 30秒左右 的函数 因此 为了在登录期间向客户端显示进度 一旦提交表单 登录页面上的 JS 函数就会开始向服务器
  • Beanstalk 部署忽略 .ebextensions 中的 nginx 配置文件

    我在单实例 Elastic Beanstalk 环境中托管 Java Web 应用程序 并添加了几个 ebextension 文件 这些文件在每次部署时成功为我创建配置文件 然而 我无法找到一种方法让 Beanstalk 在 etc ngi
  • Kubernetes Ingress 在 nginx 反向代理后面运行

    我已经在可以从互联网访问的服务器上安装了 minikube 我创建了一个可用的 kubernetes 服务 gt kubectl get service myservice NAME CLUSTER IP EXTERNAL IP PORT
  • Nginx 是否也缓冲来自客户端的 http 请求?

    我知道 Nginx 可以缓冲来自上游服务器的响应 我的问题是 Nginx 是否也缓冲来自客户端的 http 请求 我的意思是 如果 Nginx 从客户端收到 http 请求 它是否立即与上游服务器建立连接 或者它会在收到整个http请求后创
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 错误请求 400:nginx/gunicorn

    我已经遵循了这个教程 http blog wercker com 2013 11 25 django 16 part3 html http blog wercker com 2013 11 25 django 16 part3 html我现
  • 阻止 ingress-nginx 负载均衡器上的特定路径

    我有许多指向入口控制器 IP 的域 我想阻止所有域 站点的 特定路径 有没有办法做到这一点 我可以用nginx ingress kubernetes io configuration snippet 对于每个站点 但正在寻找同时处理所有站点
  • 使用查询参数值进行 NGINX 301 重定向

    我想重定向example com lang en to example com en 我正在使用 Python Django 我的服务器运行 Plesk Nginx 我尝试像这样在我的网页上重定向 但这是行不通的 rewrite lang
  • nginx上传client_max_body_size问题

    我正在运行 nginx ruby on rails 并且有一个简单的多部分表单来上传文件 一切正常 直到我决定限制要上传的文件的最大大小 为此 我设置了 nginxclient max body size to 1m 1MB 并且当该规则被

随机推荐

  • python pip

    简介 pip 是最常用的Python包管理工具 xff0c 该工具提供了对Python 包的查找 下载 安装 卸载的功能 目前Python 2 7 9 43 或 Python 3 4 43 以上版本都自带 pip 工具 xff0c 或者co
  • Julia入门-0、在Windows下安装Julia

    文章目录 0 前言1 相关网站2 Windows 系统下安装Julia3 Julia 交互式命令窗口 0 前言 Julia 是一个面向科学计算的高性能动态高级程序设计语言 Julia 最初是为了满足高性能数值分析和计算科学的需要而设计的 x
  • Julia入门-2、Julia中的全局模块对象

    在 Julia 中 xff0c 有几个关键的全局模块对象 xff1a jl main module 表示当前正在执行的模块 xff0c 也称为 顶层模块 xff08 top level module xff09 或 主模块 xff08 ma
  • Julia入门-3、Julia包管理工具

    文章目录 0 Julia 的包管理工具是 96 Pkg 96 1 使用Julia包管理工具过慢 0 Julia 的包管理工具是Pkg Julia 的包管理工具是Pkg xff0c 可以用于安装 更新 卸载和管理 Julia 中的软件包 以下
  • 华三snmp3配置

    snmp agent 开启SNMP协议 snmp agent local engineid 0000000000 系统自动生成 xff0c 无需配置 snmp agent community read h3c acl 2001 只读属性为h
  • 如何合理的选择加密软件?驱动层加密与应用层加密那个更具优势?

    合理的使用文档加密软件至关重要 站在信息安全的角度来看 xff0c 目前要做的是 xff0c 人员需要正确的对待加密软件为基础 xff0c 然后依据企业的实际办公需求 xff0c 去合理的使用文档加密软件产品来帮助企业达到数据安全保护的要求
  • 系统调用的概念及原理

    系统调用与内核函数 内核函数与普通函数形式上没有什么区别 xff0c 只不过前者在内核实现 xff0c 因此要满足一些内核编程的要求 系统调用是用户进程进入内核的接口层 xff0c 它本身并非内核函数 xff0c 但它是由内核函数实现的 x
  • ubuntu18.04下 安装SLAM-Pangolin(亲测有效)

    首先安装Pangolin所需依赖 sudo apt install libgl1 mesa dev sudo apt install libglew dev sudo apt install cmake sudo apt install l
  • 【树莓派开发日记2 】树莓派安装Ubuntu22系统及启动黑屏等问题的踩坑记录

    树莓派安装Ubuntu22系统及启动黑屏等问题的踩坑记录 在成功进行了组装后 xff0c 就到了最为关键的部分了 xff0c 进行树莓派的系统烧录 虽然树莓派有自己对应的系统 xff0c raspbian xff0c 但是绝大部分的开发者还
  • Docker 安装 MySQL

    Docker 安装 MySQL 1 拉取指定版本mysql2 创建并运行mysql容器3 通过 navicat 远程连接 docker安装教程 1 拉取指定版本mysql 拉取latest版本 xff08 最新版本 xff09 MySQL
  • 智能控制知识点总结

    智能控制知识点总结 一 选择 xff08 20分 xff09 二 填空 xff08 20分 xff09 1 智能控制系统要有自适应和自学习的能力 智能控制必须具有模拟人类学习 Learning 和自适应 xff08 Adaptation 的
  • git new repository上传

    Command line instructions Git global setup span class token function git span config global user name span class token s
  • ROS学习:ROS文件系统--package.xml

    package xml 也是一个 catkin的package 必备文件 xff0c 它是这个软件包的描述文件 xff0c 在较早的ROS 版本 rosbuild 编译系统 中 xff0c 这个文件叫做 manifest xml xff0c
  • SIFT图像拼接

    SIFT图像拼接 文章目录 SIFT图像拼接 前言二 相关工作1 SIFT2 RANSAC拟合3单应性变换4 SVD分解 三 实现步骤四 效果总结代码 前言 结合SIFT 单应性变换 Ransac和SVD等算法实现指定几幅图像之间的拼接 x
  • Redis简介

    目录 一 NoSQL介绍 二 Redis介绍 3 1什么是Redis 3 2 Redis应用场景 3 3 Redis优势 3 4 Redis与其他key value存储有什么不同 xff1f 一 NoSQL介绍 NoSQL 是 Not On
  • docker安装rabbitmq(细)

    这里使用docker安装rabbitmq xff0c 前提是要安装docker xff0c 安装docker的步骤如下 xff1a 一 安装docker 1 安装docker依赖 sudo yum install y yum utils d
  • 数组删除元素

    在数组中删除值为val的元素 xff0c 因为数组在内存中是连续存储 xff0c 所以不能只删除元素 xff0c 而是在删除元素后还要使后边元素前移 在数组中删除元素有两种方法 xff1a xff08 1 xff09 暴力解法 xff08
  • STM32F103最小系统板引脚定义

    STM32F103最小系统原理图 本人初学stm32 若有误解之处 还望大佬们指正改进 感谢 STM32F103各引脚定义 可前往 STM32F103xCDE 数据手册 英文 的第三章 Pinouts and pin description
  • 基带面试题附答案

    请列举您知道的电阻 电容 电感品牌 xff08 最好包括国内 国外品牌 xff09 电容 xff1a 美国 xff1a AVX VISHAY 威世 日本 xff1a KOA 兴亚 Kyocera 京瓷 muRata 村田 Panasonic
  • nginx简介(一)

    背景 xff1a 前面说了准备围绕运维工程师所要学习的知识进行记录和分享 xff0c linux基础的记录是一个漫长的过程 xff0c 后面会时不时的记录下 今天准备拉一个分支 xff0c 介绍一下nginx的相关内容 xff0c 由于ng