一文快速搞懂Nginx —— Nginx 详解

news2024/11/15 20:24:22

一文快速搞懂Nginx

    • 一、niginx 简介
    • 二、正向 / 反向代理
      • 2.1 正向代理
      • 2.2 反向代理
    • 三、负载均衡
    • 四、动静分离
    • 五、web 缓存
    • 六、Niginx 安装
      • 6.1 windows版本下的安装
      • 6.2 Linux版本下的安装
    • 七、常用命令
    • 八、为什么选择Nginx

一、niginx 简介

NginxApache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符Uniform Resources IdentifierURI 或者 统一资源定位符Uniform Resources LocatorURL 作为沟通依据,通过 HTTP 协议 提供各种网络服务。

Nginx是一款 轻量级Web服务器反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。

在这里插入图片描述

  • Nginx (engine x) 是一个 高性能HTTP反向代理 web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。支持 FastCGISSLVirtual HostURL RewriteGzip 等功能。并且支持很多第三方的模块扩展。
  • Nginx是一款轻量级Web 服务器 / 反向代理服务器电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上 nginx并发能力 在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度京东新浪网易腾讯淘宝等。
  • Nginx高性能HTTP反向代理的web服务器处理高并发 能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
  • Nginx支持 热部署,启动简单,可以做到 7*24 不间断运行。几个月都不需要重新启动。

    总而言之,Nginx是一个高性能、灵活和可扩展的Web服务器和代理服务器,适用于各种场景,包括静态文件服务、反向代理、负载均衡和动态内容处理等。

二、正向 / 反向代理

    经常听人说到一些术语,如反向代理,那么什么是反向代理,什么又是正向代理呢?

2.1 正向代理

    由于防火墙的原因,我们并不能直接访问谷歌、推特,看GitHub等等,那么我们可以借助 VPN 来实现,这就是一个简单的正向代理的例子。这里你能够发现,正向代理代理” 的是 客户端,而且 客户端知道目标,而目标是不知道客户端是通过VPN访问的。

在这里插入图片描述

2.2 反向代理

    当我们在 外网 访问百度的时候,其实会进行一个转发代理到内网去,这就是所谓的反向代理Reverse Proxy),即 反向代理代理” 的是 服务器端,而且这一个过程对于客户端而言是透明的。

    再比如:我们访问淘宝的时候,淘宝内部肯定不是只有一台服务器,它的内部有很多台服务器,那我们进行访问的时候,因为服务器中间 session 不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候淘宝搭建一个 过渡服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是 反向代理。对我们来说,客户端对代理是无感知的,客户端不需要任何配置就可以访问,我们只需要把请求发送给 反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的地址。

在这里插入图片描述

三、负载均衡

    单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载均衡分发到不同的服务器,也就是我们所说的负载均衡

    负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

    简单来说就是:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分?如何分配更好?又是一个问题。

Nginx给出来三种关于负载均衡的方式:

(1) 轮询法(默认方法):

  • 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能 自动剔除

适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。

(2) weight 权重模式(加权轮询):

  • 指定轮询几率,weight访问比率成正比,用于后端服务器性能不均的情况。

这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight访问比率 成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大

在这里插入图片描述

    上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

(3) ip_hash

  • 我们可以采用 ip_hash 指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问 iphash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

在这里插入图片描述

四、动静分离

     动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:csshtmljpgjs 等文件),这些不需要经过后台处理的文件称为 静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速度。

     Nginx的 静态处理 能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术

  • 动静分离技术其实是采用代理的方式,在 server{} 段中加入带正则匹配location 来指定匹配项;
  • 针对PHP动静分离静态页面交给 Nginx 处理,动态页面交给 PHP-FPM 模块或 Apache 处理。在Nginx的配置中,是通过 location 配置段 配合 正则匹配 实现静态与动态页面的不同处理方式

在这里插入图片描述

    目前,通过使用Nginx大大提高了网站的响应速度,优化了用户体验,让网站的健壮性更上一层楼!

五、web 缓存

    缓存,是 Nginx 提供的,可以加快访问速度的机制,说白了,在配置上就是一个开启,同时指定目录,让缓存可以存储到磁盘上。具体配置,大家可以参考Nginx官方文档,这里就不在展开了。

六、Niginx 安装

    Nginx跨平台的,因此,在任何平台都是可以下载的;官网 下载。

6.1 windows版本下的安装

(1)首先去官网下载最新的稳定版本:

在这里插入图片描述

  • 下载后解压打开,你会看见一下目录。

在这里插入图片描述
(2)启动

  • 启动方式一:双击 nginx.exe,双击后你能看见一个小黑窗口一闪而过。
  • 启动方式二:打开 cmd 命令窗口,切换到 nginx 解压目录下,输入命令 nginx.exe ,回车即可
    在这里插入图片描述

注意:如果安装目录是中文的情况,打开exe文件时会报错。

(3)检查是否安装成功

  • 打开浏览器:浏览器地址栏输入网址 http://localhost:80 回车,出现以下页面说明启动成功!
    在这里插入图片描述

另外说明:配置监听

  • nginx配置文件conf 目录下的 nginx.conf默认配置nginx 监听的端口为 80,如果 80 端口被占用可以修改为未被占用的端口即可。
  • 当我们修改了nginx的配置文件 nginx.conf 时,不需要关闭 nginx后重新启动nginx,只需要执行命令 nginx -s reload 即可让改动生效

在这里插入图片描述
(4)、关闭Nginx

    如果使用 cmd 命令窗口启动nginx, 关闭 cmd 窗口是不能结束 nginx进程的,可使用两种方法关闭nginx

方法一

    Nginx的安装包目录下。否则无法找到Nginx

  • 输入nginx命令: nginx -s stop (快速停止nginx)
  • 或输入 nginx -s quit (完整有序的停止nginx)

    这两个命令的区别在于 nginx -s stop快速停止Nginx,而nginx -s quit有序的停止Nginx,前者可能会导致数据没有完全保存

方法二

    使用 taskkill /f /t /im nginx.exe

  • taskkill: 是用来终止进程的
  • /f: 是强制终止
  • /t:终止指定的进程和任何由此启动的子进程
  • /im:指定的进程名称 .

    这种方法可以直接在 cmd 命令面板上使用,当第一种方法无效时可以尝试使用此方法,前第一种方法适用于大部分版本的Nginx,但是个别版本的可能不实用,使用 taskkill 就可解决。

6.2 Linux版本下的安装

(1)下载安装包:

在这里插入图片描述

  • 下载完毕上传到Linux服务器上, 我上传到了 opt/apps/目录下:
    在这里插入图片描述
    (2)解压
tar -zxvf nginx-1.24.0.tar.gz
  • 进入 nginx-1.24.0 目录
    在这里插入图片描述
    (3)配置
# 依次输入
./configure
make
make install
  • 查找安装路径: whereis nginx
    在这里插入图片描述
    (4)启动

  • 进入目录 /usr/local/nginx/sbin/, 再输入 ./nginx 启动
    在这里插入图片描述

  • 启动成功访问: 服务器ip:80
    在这里插入图片描述

  • 注意:如何连接不上,检查阿里云安全组是否开放端口,或者服务器防火墙是否开放端口!

  • 相关命令:

# 开启service firewalld start
# 重启service firewalld restart
# 关闭service firewalld stop
# 查看防火墙规则firewall-cmd --list-all
# 查询端口是否开放firewall-cmd --query-port=8080/tcp
# 开放80端口firewall-cmd --permanent --add-port=80/tcp
# 移除端口firewall-cmd --permanent --remove-port=8080/tcp#重启防火墙(修改配置后要重启防火墙)firewall-cmd --reload
# 参数解释1、firwall-cmd:是Linux提供的操作firewall的一个工具;2、--permanent:表示设置为持久;3、--add-port:标识添加的端口;

七、常用命令

cd /usr/local/nginx/sbin/
./nginx  # 启动

# 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s stop

# 平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s quit

# 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reload

# 重新打开日志文件
nginx -s reopen

# 为 Nginx 指定一个配置文件,来代替缺省的
nginx -c filename

# 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -t

#  显示 nginx 的版本
nginx -v

# 显示 nginx 的版本,编译器版本和配置参数
nginx -V

# 格式换显示 nginx 配置参数
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua

八、为什么选择Nginx

    Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。在Nginx网站上,其功能包括:

  • HTTP和HTTPS(TLS / SSL / SNI)
  • 超快速的Web服务器用于静态内容
  • FastCGI,WSGI,SCGI用于动态内容
  • 具有负载平衡和缓存功能的加速Web代理
  • 不间断实时二进制升级和配置
  • 压缩和内容过滤器
  • 虚拟主机
  • FLV和MP4的媒体流
  • 带宽和连接策略
  • 全面的访问控制
  • 自定义日志
  • 嵌入式脚本
  • 带有TLS的SMTP / IMAP / POP3的邮件代理
  • 逻辑,灵活,可扩展的配置
  • 在Linux,FreeBSD,Mac OS X,Solaris和Windows上运行

Nginx有如下优势

  1. IO多路复用 epoll(IO复用)

如何理解呢?举个例子吧!

有A、B、C三个老师,他们都遇到一个难题,要帮助一个班级的学生解决课堂作业。

  • 老师A采用从第一排开始一个学生一个学生轮流解答的方式去回答问题,老师A浪费了很多时间,并且有的学生作业还没有完成呢,老师就来了,反反复复效率极慢。
  • 老师B是一个忍者,他发现老师A的方法行不通,于是他使用了影分身术,分身出好几个自己同一时间去帮好几个同学回答问题,最后还没回答完,老师B消耗光了能量累倒了。
  • 老师C比较精明,他告诉学生,谁完成了作业举手,有举手的同学他才去指导问题,他让学生主动发声,分开了并发”。

这个老师C就是 Nginx

  1. 轻量级

功能模块少 - Nginx仅保留HTTP 需要的模块,其他都用插件的方式,后天添加
代码模块化 - 更适合二次开发,如阿里巴巴 Tengine

  1. CPU亲和

CPU核心和Nginx 工作进程绑定,把每个worker进程固定在一个CPU上执行,减少切换CPU的 cache miss,从而提高性能。


仅供学习参考,如有不足,欢迎指正。

参考文章

1. Nginx详解
2. 8分钟带你深入浅出搞懂Nginx
3. Nginx 配置详解
4. Nginx详解(一文带你搞懂Nginx)
5. nginx基本介绍(安装、常用命令、反向代理)

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

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

相关文章

C语言光速入门笔记

C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言。C语言是计算机产业的核心语言,操作系统、硬件驱动、关键组件、数据库等都离不开C语言;不学习C语言,就不能了解计算机底层。 目录 C语言介绍C语言特…

PAT 乙级 1056 组合数的和

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。 输入格式: 输入在一行…

水母目标检测数据集VOC格式500张

水母,一种美丽而神秘的海洋生物,以其独特的形态和生态习性而备受瞩目。 水母的体型呈伞状,身体透明,有各种颜色和花纹。它们没有骨骼,身体由胶状物质组成,非常柔软和脆弱。水母通过触手上的刺细胞释放毒素…

Unity 一文掌握使用AddListener方法为组件事件添加监听器的方法

在Unity中,很多组件都带有事件,比如: Button组件:onClick() Toggle组件:On Value Changed(Boolean) Dropdown组件:On Value Changed(Int32) InputField组件:On Value Changed(String)、On End Edit(Stri…

【leetcode】力扣算法之有效的数独【中等难度】

题目描述 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图&…

CodeWave智能开发平台--03--目标:应用创建--07供应商数据表格

摘要 本文是网易数帆CodeWave智能开发平台系列的第09篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成07供应商数据表格 CodeWave智能开发平台的09次接触 CodeWave参考资源 网易数帆CodeWave开发者…

Micro-app 微前端框架demo介绍

Micro-app 框架 1、框架安装 npm i micro-zoe/micro-app --save2、子应用对应的view页面 <template><div><!-- name(必传)&#xff1a;应用名称url(必传)&#xff1a;应用地址&#xff0c;会被自动补全为http://localhost:3000/index.htmlbaseroute(可选)&…

mysql进阶-重构表

目录 1. 原因 2. 如何重构表呢&#xff1f; 2.1 命令1&#xff1a; 2.2 命令2&#xff1a; 2.3 命令3&#xff1a; 1. 原因 正常的业务开发&#xff0c;为什么需要重构表呢&#xff1f; 原因1&#xff1a;某张表存在大量的新增和删除操作&#xff0c;导致表经历过大量的…

Kali Linux——设置中文

【问题现象】 从下图可以看到&#xff0c;菜单全是英文的。对于英文不好的同学&#xff0c;使用起来很难受。 【解决方法】 1、获取root权限 su root 2、进入语言设置 dpkg-reconfigure locales 3、选择zh_CN.UTF-8 UTF-8 4、设置默认 5、安装完成 6、重启虚拟机 reboot…

多租户看这一篇就够了

什么是多租户&#xff1f;举个例子&#xff1a;马云、马化腾和刘强东三个人去租房子&#xff0c;他们因为家里经济困难所以勤工俭学&#xff0c;三个人决定合租一套三室一厅的房子&#xff0c;虽然每个人有自己的房间&#xff0c;但是家里的水电、厨房、卫生间和热水器都是大家…

强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)

文章目录 概览&#xff1a;RL方法分类蒙特卡洛方法&#xff08;Monte Carlo&#xff0c;MC&#xff09;MC BasicMC Exploring Starts&#x1f7e6;MC ε-Greedy 本系列文章介绍强化学习基础知识与经典算法原理&#xff0c;大部分内容来自西湖大学赵世钰老师的强化学习的数学原理…

欧拉函数算法总结

知识概览 欧拉函数为1~n中与n互质的数的个数。假设一个数N分解质因数后的结果为 则欧拉函数 这可以用容斥原理来证明。 欧拉函数的应用 欧拉定理&#xff1a;若a与n互质&#xff0c;则。 费马小定理&#xff1a;欧拉定理中的n为质数p时&#xff0c;可以得到若a与p互质&#xff…

Java:结束本机端口被占用进程

前言 在实际开发当中我们&#xff0c;往往在idea中将某个服务的启动给关闭了&#xff0c;但是在nacos的某个服务上&#xff0c;我们却可以看到本地别名服务还是在上面挂载着本地再次启动的时候就提示【端口被占用】&#xff0c;今天就说一下如何解决这个问题 操作 点击即可预…

我的创作纪念日——redis的历史纪录

机缘 最开始只想存留点Redis的操作信息&#xff0c;后来写着写着也就写多了&#xff0c;虽然后面很长时间由于忙就没继续写&#xff0c;但是还是偶尔登录看一下&#xff0c;有好几篇文章的浏览量还是很多的呢。 收获 收获不多&#xff0c;粉丝也才三十多个&#xff0c;浏览量感…

mac版viso软件 流程图软件omnigraffile

OmniGraffle 是一款由 The Omni Group 开发的绘图工具&#xff0c;主要用于创建各种类型的图表、流程图、组织结构图、网站地图等。它提供了丰富的绘图工具和功能&#xff0c;包括形状、线条、文本、颜色、样式等&#xff0c;可以帮助用户轻松地创建出精美的图表和图形。 OmniG…

优化器(一)torch.optim.SGD-随机梯度下降法

torch.optim.SGD-随机梯度下降法 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR10(root./data, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor()) data…

【51单片机】独立按键控制LED灯

不同于上篇文章只用代码控制&#xff0c;这次我们要再加上独立按键一同控制LED灯 目录 独立按键控制LED亮灭&#xff1a;代码实现&#xff1a; 独立按键控制LED状态&#xff1a;代码实现&#xff1a; 独立按键实现二进制LED显示&#xff1a;代码实现&#xff1a; 独立按键控制…

【C++】几种常用的类型转换

类型转换 c语言中的类型转换C的类型转换static_castreinterpret_castconst_castdynamic_cast c语言中的类型转换 在C语言中我们经常会遇到类型转化的问题&#xff0c;主要分为两种&#xff1a;显式类型转换和隐式类型转换。 显式类型转换&#xff1a;就是程序员使用强制类型转…

二叉树算法题(一)

根据二叉树创建字符串 根据二叉树创建字符串 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省…

SpringBoot全局Controller返回值格式统一处理

一、Controller返回值格式统一 1、WebResult类 在 Controller对外提供服务的时候&#xff0c;我们都需要统一返回值格式。一般定义一个 WebResult类。 统一返回值&#xff08;WebResult类&#xff09;格式如下&#xff1a; {"success": true,"code": 2…