解锁Nginx的奇幻世界:入门

news2024/11/25 6:41:12

文章目录

  • 一 Nginx简介
    • 1.1 C10k问题
    • 1.2 Nginx
  • 二 Nginx的作用
    • 2.1 反向代理
    • 2.2 方向代理演示
    • 2.3 负载均衡
    • 2.4 动静分离
  • 三 Nginx的安装
    • 3.1 windows环境

一 Nginx简介

1.1 C10k问题

  • C10k问题指的是在一个服务器端同时处理成千上万(10,000)个并发连接的能力。这个问题最早由Dan Kegel在1999年提出,他在一篇名为"C10k problem"的论文中描述了如何解决服务器在处理大量并发连接时的性能瓶颈。

  • 在早期,许多服务器软件(如Apache)使用传统的进程或线程模型来处理客户端请求,每个连接都需要一个独立的进程或线程来处理。当并发连接数增加时,服务器的资源开销急剧增加,导致性能下降和系统崩溃。

  • C10k问题的挑战在于,如何设计一种服务器架构或使用一种事件驱动的模型,使得服务器能够高效地处理大量并发连接,同时保持低资源消耗。 这样就可以在一个服务器上同时支持成千上万的并发连接,而不会造成性能问题。

  • Nginx是在解决C10k问题上取得了显著成果的服务器软件之一。通过采用事件驱动、非阻塞的处理方式,Nginx能够高效地处理大量并发连接,成为了解决C10k问题的一个优秀解决方案。


1.2 Nginx

  • Nginx是一款高性能、轻量级的开源Web服务器软件。它也可以用作反向代理服务器、负载均衡器和HTTP缓存等。Nginx的设计目标是为了解决C10k问题,即同时处理成千上万个并发连接的问题,因此它在高并发场景下表现出色。

  • Nginx 不仅作为高性能的 Web 服务器,还支持其他协议,包括 IMAP、POP3 和 SMTP。除了作为 Web 服务器,Nginx 还可以配置为邮件代理服务器,从而处理与电子邮件相关的服务。

  • Nginx 在这些协议方面的功能:

协议说明
IMAP(Internet Message Access Protocol)Nginx 可以配置为 IMAP 代理,使其能够处理来自电子邮件客户端(如 Thunderbird 或 Outlook)的 IMAP 请求,并将其传递到后端的 IMAP 服务器。这样的配置可以帮助分担负载,提供更好的 IMAP 服务可扩展性。
POP3(Post Office Protocol version 3)与 IMAP 类似,Nginx 可以配置为 POP3 代理。它可以接收来自电子邮件客户端的 POP3 请求,将其转发到相应的后端 POP3 服务器,并将响应返回给客户端。
SMTP(Simple Mail Transfer Protocol)Nginx 还可以作为 SMTP 代理,接收来自电子邮件客户端或其他邮件服务器的 SMTP 消息,并将其中转到指定的目标邮件服务器。这样的配置可用于负载均衡或作为安全措施,以过滤掉不需要的电子邮件流量。
  • 通过支持这些电子邮件协议,Nginx 成为了处理各种 Web 和电子邮件服务的多功能工具。

Nginx的一些特点和优势:

优势说明
高性能Nginx采用事件驱动、非阻塞的处理方式,能够高效地处理大量并发连接,对系统资源消耗较少。
轻量级Nginx的内存占用更少,启动速度更快
可扩展性Nginx支持模块化架构,可以通过编写自定义模块来扩展其功能。
热部署Nginx支持热部署,即在不停止服务的情况下重新加载配置文件,使得配置更新更加方便。
反向代理和负载均衡Nginx可以作为反向代理,将客户端请求转发给后端服务器,并且支持负载均衡策略,实现请求的平衡分发。
高度可定制Nginx可以通过配置文件进行灵活的定制,如设定缓存规则、限制连接数等。
支持安全特性Nginx具备许多安全功能,如基于IP地址的访问控制、SSL/TLS支持等。
  • Nginx具有高性能和可靠性,它在互联网上广泛应用于高负载的网站和应用程序,成为非常受欢迎的Web服务器软件之一。许多大型网站、云服务和应用平台都在使用Nginx来处理客户端的请求并提供服务。

二 Nginx的作用

Nginx是一个开源的高性能的HTTP和反向代理服务器,它具有以下作用:

  1. HTTP服务器:Nginx可以作为一个HTTP服务器,可以处理静态文件和动态文件,并支持多个并发连接。

  2. 反向代理服务器:Nginx可以作为反向代理服务器,将请求转发给后端的多个服务器,实现负载均衡和高可用性。

  3. 负载均衡:Nginx可以通过配置多个后端服务器,并使用不同的负载均衡算法(如轮询、IP哈希、最少连接等)来分配请求,实现负载均衡。

  4. 静态文件服务:Nginx可以快速地处理静态文件请求,减轻后端服务器的负载。

  5. 反向代理缓存:Nginx可以将后端服务器返回的动态内容缓存起来,减少对后端服务器的请求,提高性能。

  6. SSL/TLS终端代理:Nginx可以作为SSL/TLS终端代理,对外提供安全的HTTPS服务。

  7. URL重写和重定向:Nginx可以通过配置URL重写和重定向规则,实现URL的重写和重定向。

  8. 动态模块支持:Nginx支持通过第三方模块扩展其功能,可以通过编写动态模块来实现特定的需求。

2.1 反向代理

  • 有关正向代理和反向代理的内容,请参看正向代理与反向代理:解密网络代理的两种不同姿态

  • Nginx的反向代理是一种常见的用法,客户端并不直接连接到后端服务器,而是通过Nginx服务器进行连接。

反向代理的优势在于它可以用来实现多种功能,包括:

  1. 负载均衡:通过反向代理,Nginx可以将客户端请求平均分配到多个后端服务器,从而实现负载均衡。

  2. 安全性:Nginx反向代理可以隐藏后端服务器的真实IP地址和架构,对外部客户端隐藏实际的服务器拓扑结构,客户端只与Nginx进行通信,而无法直接访问后端服务器。

  3. 缓存:Nginx可以将后端服务器的响应缓存起来,当相同的请求再次到来时,可以直接返回缓存的响应,减轻后端服务器的负担,提高响应速度和并发处理能力。

  4. SSL终端:Nginx可以在反向代理中进行SSL终端,即接收客户端的加密请求,并将解密后的请求转发给后端服务器,实现端到端的加密通信。

2.2 方向代理演示

  • 反向代理的配置通常通过Nginx的配置文件完成。

  • 以下是一个简单的示例,假设我们有两台后端服务器,分别运行在IP地址为192.168.0.10和192.168.0.11上,监听端口为80:

    http {
        server {
            listen 80;
    
            location / {
                proxy_pass http://backend_servers;
            }
        }
    
        upstream backend_servers {
            server 192.168.0.10;
            server 192.168.0.11;
        }
    }
    
  • Nginx会监听80端口,并将所有请求通过proxy_pass指令转发给后端服务器组backend_servers,其中后端服务器组包括两台后端服务器的IP地址和端口。客户端的请求就会被代理到后端服务器,然后将响应返回给客户端。如果其中一台后端服务器故障,Nginx仍然会将请求转发给另一台正常运行的服务器。

2.3 负载均衡

  • Nginx 确实提供了两种类型的负载均衡策略:内置策略和扩展策略。
  1. 内置策略:
    Nginx 默认提供了几种内置的负载均衡策略:

  • 轮询(Round Robin):按照请求的顺序依次将请求分发给后端服务器,循环进行。
    在这里插入图片描述

  • 最少连接(Least Connections):将请求发送到当前活跃连接数最少的后端服务器。

  • IP 哈希(IP Hash):使用客户端的 IP 地址来计算一个哈希值,并根据该哈希值将客户端的所有请求都发送到同一台后端服务器,实现会话保持。
    在这里插入图片描述

  • 加权轮询(Weighted Round Robin):给不同的后端服务器分配不同的权重,根据权重比例来分配请求。
    在这里插入图片描述
  1. 扩展策略:
    • Nginx 还支持通过第三方模块或插件实现更多的负载均衡策略。这些扩展策略可以根据特定需求来实现更高级的负载均衡方式。
    • 例如,可以使用第三方模块实现基于服务器的负载均衡算法,根据后端服务器的性能、健康状态或其他指标来动态调整请求分发。
  • 无论是内置策略还是扩展策略,Nginx 都提供了灵活的配置选项,允许管理员根据具体的应用场景选择最适合的负载均衡策略。
  • 负载均衡有助于提高应用程序的性能、可伸缩性和可靠性,确保服务器资源的合理利用,避免单点故障,并提供更好的用户体验。

2.4 动静分离

Nginx动静分离是一种优化网站性能的策略,通过将动态内容和静态内容分开处理,从而提高网站的加载速度和并发处理能力。

在传统的网站架构中,网页通常包含两类内容:

  1. 动态内容:这些内容通常由应用程序生成,包括动态页面、数据库查询、用户登录状态等。每次访问这些动态内容时,应用程序都需要动态地生成并返回给客户端。

  2. 静态内容:这些内容在服务器上事先生成好,不依赖于用户的请求,例如图片、CSS文件、JavaScript文件等。

  • 动静分离的主要思想是将静态内容和动态内容分别存放在不同的服务器上,然后由Nginx负责根据请求的类型将其分发到对应的服务器处理。
    在这里插入图片描述
  • 动静分离可以提高网站的性能和可扩展性,原因如下:
  1. 静态资源由Nginx直接处理:Nginx在处理静态资源时非常高效。由于静态资源不需要动态生成,Nginx可以直接返回这些内容给客户端,而无需调用后端应用程序。这减轻了后端服务器的负担,提高了静态资源的响应速度。

  2. 减少后端应用程序的压力:将静态内容交由Nginx处理后,后端应用程序只需要专注于动态内容的生成和处理,降低了对后端服务器的压力,提高了应用程序的性能和稳定性。

  3. 并发处理能力提升:Nginx作为高性能的Web服务器,具备出色的并发处理能力。通过动静分离,静态内容的处理交由Nginx处理,可以更好地利用其并发处理能力,更快地响应大量静态资源的请求。

实现动静分离可以通过在Nginx配置文件中设置不同的location来实现。 例如,可以将静态资源的URL路径指向一个特定目录,Nginx会根据这些配置将静态请求直接返回,而动态请求则会转发到后端应用程序处理。


  • Nginx动静分离是通过将动态内容和静态内容分开处理,让Nginx专门处理静态资源请求,减轻后端应用程序的负担,提高网站的性能和并发处理能力。

三 Nginx的安装

  • nginx下载链接

3.1 windows环境

  1. 打开nginx下载链接,选择稳定版进行下载即可!!
    在这里插入图片描述
    在这里插入图片描述
  2. 打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe回车,然后访问localhost即可
    在这里插入图片描述
  3. 配置监听
    • nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可。
      在这里插入图片描述
  • 修改nginx的配置文件nginx.conf 时,不需要关闭nginx后重新启动nginx,只需要执行命令nginx -s reload 即可让改动生效
  1. 关闭nginx
  • 使用cmd命令窗口启动nginx, 关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx
  1. 输入nginx命令nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)
  2. 使用taskkill taskkill /f /t /im nginx.exe
PS C:\environment\nginx-1.24.0> nginx -s stop
nginx : 无法将“nginx”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包
括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ nginx -s stop
+ ~~~~~
    + CategoryInfo          : ObjectNotFound: (nginx:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


Suggestion [3,General]: 找不到命令 nginx,但它确实存在于当前位置。默认情况下,Windows PowerShell 不
会从当前位置加载命令。如果信任此命令,请改为键入“.\nginx”。有关详细信息,请参阅 "get-help about_Command_Precedence"。
PS C:\environment\nginx-1.24.0> .\nginx -s stop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/723000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文精读】RA-MVSNet:Multi-View Stereo Representation Revisit: Region-Aware MVSNet

今天读的是一篇发表在CVPR2023上的文章,作者来自浙大与阿里巴巴。 文章链接:Multi-View Stereo Representation Revisit: Region-Aware MVSNet 目录 Abstract1 Introduction2 Related Work3 Method3.1 Cost Volume Construction3.2 Signed Distance Supe…

十一、弹性盒flex - 介绍

目录 1.flex介绍 2.详解 一、flex介绍 flex(弹性盒,伸缩盒) css中的又一种布局手段,它主要用来代替浮动来完成页面的布局。flex可以使元素具有弹性,让元素可以跟随页面的大小的改变而改变。 我们知道float&#xff1…

【linux kernel】一文总结linux内核通知链

文章目录 1、通知链简介2、通知链的类型3、原理分析和API(1)注销通知器(2)注销通知器(3)通知链的通知 4、实例代码(1)定义一个通知链(2)实现观察者模块&#…

从源码全面解析 Java SPI 的来龙去脉

一、引言 对于 Java 开发者而言,关于 dubbo ,我们一般当做黑盒来进行使用,不需要去打开这个黑盒。 但随着目前程序员行业的发展,我们有必要打开这个黑盒,去探索其中的奥妙。 虽然现在是互联网寒冬,但乾坤…

数字化转型应该从哪里开始?

数字化转型可能是一个复杂的过程,涉及将数字技术和战略集成到组织的各个方面。虽然具体的起点可能会根据组织的规模、行业和目标而有所不同,但数字化转型计划通常从以下几个共同领域开始: 愿景和战略:转型之旅应从与组织目标一致的…

百万数据SQL优化技巧,看这一篇就够了(实操+详细总结)

前言:这次准备了100W的数据进行SQL性能测试,数据库采用的是MySQL,总共介绍了常见的15种SQL优化方式,每一种优化方式都进行了实打实的测试,逐行讲解,通俗易懂! 目录 一、准备数据 1、创建表结构…

Windows环境下安装和配置python环境

Windows环境下安装和配置python环境 1.官网下载:https://www.python.org/downloads/release 2.安装:自定义路径即可无脑下一步 3.cmd打开控制台,输入python,如果页面切换成以下样子就说明安装成功了 4.运行python脚本【步骤3切入…

555、Vue 3 学习笔记 -【常用Composition API(四)】 2023.07.06

目录 一、setup的两个注意点1. setup执行的时机2. setup的参数 二、 计算属性与监视1. computed函数2. watch函数3. watchEffect函数 三、参考链接 一、setup的两个注意点 1. setup执行的时机 在beforeCreate之前执行一次,this是undefined 2. setup的参数 props…

GitLab名词介绍

GitLab名词介绍 分支:active、stale、default、protected IDEA中git面板:本地、远程、HEAD 合并时的选项:Delete、squash 查看Git常用操作 分支:active、stale、default、protected 在分支页面下,有active、stale…

k8s中kubectl陈述式/声明式资源管理

k8s陈述资源管理方法的说明 1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息&…

TongWeb8关于内存泄露提示: To prevent a memory leak

原因: 该问题与 https://blog.csdn.net/realwangpu/article/details/109510297 相同,TongWeb7, TongWeb8在卸载应用时,会尝试回收可能存在的内存泄露, 本质应该从应用方面解决。 解决办法: 若无法修改应用&#xff0c…

深度学习神经网络学习笔记-论文研读-transformer

摘要 优势序列转导模型基于复杂的循环或包括一个编码器和一个解码器的卷积神经网络。最好的表现良好的模型还通过attention 连接编码器和解码器机制。我们提出了一种新的简单的网络架构,Transformer, 完全基于注意力机制,省去了递归和卷积完…

【成都理工826】22年真题及解析

哈喽大家好,鉴于真题系列反馈很不错,我决定重启真题系列!之前更新的22真题合集点击这里: 成都理工826信号与系统难度不是特别大,但是对计算的要求比较高。掌握好基础,计算细心是可以拿高分的。本套试题内容…

【我们一起60天准备考研算法面试(大全)-第四天 4/60(二叉搜索树与表达式树)】【每天40分钟,我们一起用60天准备 考研408-数据结构(笔试)】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

github搜索技巧笔记

一、了解 GitHub Watch按钮 Watch可以理解为关注的意思,默认情况下是Not watching,当选择Watch后,你会收到这个GitHub项目的所有动态。比如:有人发起pull request或者issue等。接收动态方式包括个人通知中心或者邮箱。 如果某个…

TypeScript - 函数(中)

目录 1、编写良好泛型函数的准则 1.1 向下推送类型参数 1.2 使用较少的类型参数 1.3 类型参数应出现两次 2、可选参数 3、回调中的可选参数 4、函数重载 5、重载签名和实现签名 6、写好重载 1、编写良好泛型函数的准则 编写泛型函数很有趣,并且很容易被类…

Kibana对索引库的操作(3)

这里我们主要是对索引库进行各种查询的操作,所以要提前准备一些数据 POST /leq/goods/3 {"title": "小米手机","images": "3.jpg","price": 4299,"stock": 200,"saleable": true,"subTitle":…

读发布!设计与部署稳定的分布式系统(第2版)笔记20_实例层之代码

1. 术语的定义 1.1. 服务 1.1.1. 指共同协作、以单元的形式对外提供功能的跨机器进程集合 1.1.2. 一个服务可以由多种可执行文件组成 1.1.3. 一个服务可能包含来自多个可执行文件的多个进程 1.1.4. 可能对外呈现单个IP地址,并在后台进行负载均衡 1.1.5. 可能有…

潇洒郎: bat文件与vbs文件, 执行命令行命令以及执行时无console, reg文件注册表

截图.bat start snippingtool 锁屏.bat rundll32.exe user32.dll,LockWorkStation redis.bat cd %~dp0 redis-server.exe redis.windows.conf vbs Set ws CreateObject("Wscript.Shell") ws.run "cmd /c C:/Python27/Scripts/ride.bat",vbhide 在上…

记录好项目D23

记录好项目 你好呀,这里是我专门记录一下从某些地方收集起来的项目,对项目修改,进行添砖加瓦,变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个基于Springboot教务管理系统 一、系统介绍 这个项目是一个简单的教…