Nginx原理以及基础知识详解

Nginx是一个高性能的HTTP和反向代理服务器,具有高并发性、高可靠性、低内存消耗等特点。其工作原理和基础知识如下:

一、Nginx的工作原理

Nginx采用多进程模型,主进程负责接收客户端的连接请求,然后将连接请求分发给工作进程来处理。每个工作进程可以处理多个客户端连接,采用异步非阻塞的方式来处理连接请求。当一个连接请求到达时,Nginx会将其放入事件队列中,然后由一个工作进程异步地处理该请求。这种处理方式使得Nginx可以支持非常高的并发连接数,从而能够更快地响应客户端的请求。

二、Nginx的基础知识

  1. 反向代理:反向代理是指客户端向代理服务器发送请求,代理服务器根据配置规则将请求转发给相应的原始服务器。客户端并不知道它访问的原始服务器是谁,只知道它访问的是一个虚拟的IP地址。反向代理可以提高系统的安全性和可扩展性,同时还可以实现负载均衡和缓存等功能。
  2. 负载均衡:负载均衡是指将请求分发到多个应用服务器上,从而将负载分发到不同的服务器上,以提高系统的性能和可靠性。Nginx支持多种负载均衡策略,如轮询、加权轮询、IP哈希等。通过负载均衡,可以将单个服务器无法承受的高并发请求量分散到多个服务器上,从而提高系统的整体性能和可靠性。
  3. 动静分离:为了加快网站的解析速度,可以将动态页面和静态页面由不同的服务器来解析。这样可以将原来单个服务器的压力分散到多个服务器上,从而提高网站的响应速度和稳定性。Nginx可以通过配置实现动静分离,将静态页面请求直接转发给静态页面服务器,而将动态页面请求转发给应用服务器处理。

举例讲解基础知识:

假设有一个电商平台网站,每天有大量的用户访问和下单。为了保证网站的稳定性和性能,可以使用Nginx作为反向代理服务器和负载均衡器。具体实现方式如下:

  1. 将Nginx部署在网站的前端,作为反向代理服务器。用户的请求首先会到达Nginx服务器,然后由Nginx根据配置规则将请求转发给相应的应用服务器。这样可以隐藏应用服务器的真实IP地址,提高系统的安全性。
  2. 在Nginx上配置负载均衡策略,如轮询或加权轮询。假设有3台应用服务器,可以将请求均匀地分发到这3台服务器上,从而分散单个服务器的压力,提高系统的整体性能和可靠性。
  3. 为了加快网站的解析速度,可以将动态页面和静态页面由不同的服务器来解析。可以将静态页面请求直接转发给静态页面服务器(如CDN),而将动态页面请求转发给应用服务器处理。这样可以降低原来单个服务器的压力,提高网站的响应速度和稳定性。

如何使用Nginx进行动静分离:

使用Nginx进行动静分离的基本步骤是将动态内容服务器(如PHP服务器)和静态内容服务器(如文件服务器)分开部署,并在Nginx中配置反向代理。对于动态内容的请求,Nginx会将其转发到动态内容服务器处理;而对于静态内容的请求,Nginx会直接从自己发布的路径读取并返回。

以下是一些基本的配置步骤:

  1. 在Nginx的配置文件中定义动态内容服务器和静态内容服务器。这可以通过upstream指令来实现。例如:

 

nginx复制代码

upstream dynamic_server {
server 127.0.0.1:9000; # 这里是动态内容服务器的地址和端口
}
upstream static_server {
server 127.0.0.1:8000; # 这里是静态内容服务器的地址和端口
}
  1. server块中配置对静态和动态内容的处理。对于静态内容,可以直接使用rootalias指令指定Nginx发布的路径。对于动态内容,需要使用proxy_pass指令将请求转发到动态内容服务器。例如:

 

nginx复制代码

server {
listen 80;
location /static/ {
root /path/to/static/files; # 这里是静态文件的路径
}
location / {
proxy_pass http://dynamic_server; # 将请求转发到动态内容服务器
}
}

在上面的配置中,所有以/static/开头的请求都会被Nginx当作静态内容处理,并从/path/to/static/files路径中读取文件返回。其他所有请求都会被转发到动态内容服务器处理。

需要注意的是,为了保证后端程序的一致性,可以使用Rsync进行服务端自动同步,或者使用NFS、MFS等分布式共享存储。此外,如果需要使用缓存功能,可以集成第三方的ngx_cache_purge模块来清除指定的URL缓存。

以上只是基本的配置步骤,实际配置可能会根据具体的需求和环境有所不同。在配置过程中,需要参考Nginx的官方文档和相关教程,确保配置的正确性和有效性。

在Nginx中配置反向代理,应该如何做:

要在Nginx中配置反向代理,你可以按照以下步骤进行操作:

  1. 打开Nginx的配置文件。通常,Nginx的配置文件位于/etc/nginx/nginx.conf,或者使用nginx -t命令来测试配置文件的路径。

  2. 在配置文件中找到http块,并在其中添加一个新的server块。这个server块将用于定义反向代理的配置。

  3. server块中,使用listen指令指定Nginx要监听的端口。例如,listen 80;表示Nginx将监听80端口。

  4. 使用server_name指令指定你的域名或IP地址。这将告诉Nginx哪些请求应该由这个server块处理。例如,server_name example.com;表示这个server块将处理来自example.com的请求。

  5. server块中添加一个location块,用于指定要代理的URL路径。例如,location / { ... }表示所有的请求都将被代理。

  6. location块中,使用proxy_pass指令指定反向代理的目标地址。这个地址应该是你想要将请求转发到的后端服务器的地址和端口。例如,proxy_pass http://backend;表示将请求转发到名为backend的上游服务器。

  7. (可选)你还可以使用proxy_set_header指令来设置一些HTTP头信息,以便后端服务器能够正确地识别和处理请求。例如,proxy_set_header Host $host;将设置Host头为原始请求的主机名。

  8. 保存配置文件并退出编辑器。

  9. 检查配置文件的语法是否正确。可以使用nginx -t命令来测试配置文件,确保没有错误。

  10. 如果配置文件语法正确,重新加载Nginx配置,使新的反向代理配置生效。可以使用sudo service nginx reload命令来重新加载配置。

完成以上步骤后,Nginx将开始作为反向代理服务器工作,将客户端的请求转发到你指定的后端服务器。请确保你的后端服务器已经正确配置并能够处理这些请求。

总之,Nginx是一个功能强大的反向代理服务器和负载均衡器,通过了解其工作原理和基础知识,可以更好地应用它来提高系统的性能和可靠性。

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

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

相关文章

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据

1. 大数据分析 1.1. 随着“大数据军备竞赛”与定价算法的广泛应用,线上购物平台与实体商铺的界限也变得越来越模糊 1.2. 在沃尔玛疯狂扩张的时代,它给地区性商业带来的伤害不亚于一场地震 1.2.1. 当地的小型商铺往往…

浏览器工作原理与Javascript高级(异步)

总体介绍 浏览器运行是多进程的,包括主进程、渲染进行、网络进程和GPU进程等等 解析HTML时(渲染进程)用到两大引擎,一个是渲染引擎(用于渲染页面)、一个是JS引擎用于解析JS代码。又JS引擎运行是单线程的,所以渲染和 …

Dubbo基础入门一

1、什么是Dubbo3 Apache Dubbo 是一款易用、高性能的 WEB 和 RPC 框架,同时为构建企业级微服务提供服务发现、流量治理、可观测、认证鉴权等能力、工具与最佳实践。 “Dubbo3 已在阿里巴巴内部微服务集群全面落地,成功取代运行多年的 HSF 框架。” 2、…

【Linux】Linux原生异步IO(二):libaio相关结构体、函数详解

1、结构体 1.1 iocb struct iocb成员变量详解: struct iocb {PADDEDptr(void *data, __pad1); /1、在io完成事件中返回,与io_getevents方法返回的io_event结构体data成员一致一般存放用户自定义数据、用户数据、回调函数*/PADDED(unsigned key, aio_rw_flags

5G 网络切片VLAN ID配置错误导致业务不可用

【摘要】随着电联5G共建共享工作的开展,无法及时有效观测到单逻辑站点的相关指标,导致单运营商用户业务出现异常。本案例中着重对单运营商用户无法使用网络进行相关参数排查,从KPI性能指标结合故障告警发生时间,从而分析由于网络切…

稀碎从零算法笔记Day6-LeetCode:长度最小的子数组

前言:做JD的网安笔试题,结果查找子串(单词)这个操作不会。痛定思痛,决定学习滑动数组 题型:数组、双指针、滑动窗口 链接:209. 长度最小的子数组 - 力扣(LeetCode) 来…

(学习日记)2024.03.06:UCOSIII第八节:空闲任务+阻塞延时+main函数修改

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

CSS字体样式值,前端开发基础学习

元素特点: 块状元素: 在页面中以矩形区域显示。自上而下排列,独占一行可以直接添加宽高一般情况下,作为其他元素或内容的容器 行内元素: 在页面中最小单位也是矩形。在一行内逐个排列。不可以直接添加宽高&#xf…

VGG16-CF-VGG11实验报告

说明:VGG16和CF-VGG11是论文《A 3D Fluorescence Classification and Component Prediction Method Based on VGG Convolutional Neural Network and PARAFAC Analysis Method》使用的两种主要模型。其对应代码仓库提供了实验使用的数据集、平行因子分析结果和CNN模…

vue3 (二)v-model高级用法

1、子组件可以无需使用事件,直接通过this.$emit(update:modelValue, newValue) 修改父组件的数据 前置条件: (1).父组件通过 v-model 绑定自身数据(可传递给子组件) (2).子组件通过props中的 modelValue 来接收数据 (3).子组件通…

5.47 BCC工具之oomkill.py解读

一,工具简介 oomkill工具用于跟踪 Linux 的内存溢出(OOM)查杀,并在每行显示一个 OOM 杀死的基本详细信息。 二,代码示例 #!/usr/bin/env pythonfrom bcc import BPF from time import strftime# linux stats loadavg = "/proc/loadavg"# 定义 BPF程序 bpf_te…

OWASP Top 10 网络安全10大漏洞——A01:2021-访问控制中断

10大Web应用程序安全风险 2021年top10中有三个新类别、四个类别的命名和范围变化,以及一些合并。 A01:2021-访问控制中断 从第五位上升到top1,94%的应用程序都经过了某种形式的访问控制破坏测试,平均发生率为 3.81%且在贡献的…

flutter弹窗输入,Android学习的三个终极问题及学习路线规划

题库非常全面包括: Android基础知识: 基本涵盖Android所有知识体系,四大组件,Fragment,WebView,事件分发,View绘制…Java基础知识&高阶知识点: 基础部分不谈了,高阶部分:泛型,反射&#xff…

蓝桥杯刷题(一)

一、 import os import sys def dps(s):dp [0] * len(s)dp[0] ord(s[0]) - 96if len(s) 1:return dp[-1]dp[1] max(ord(s[0]) - 96, ord(s[1]) - 96)for i in range(2, len(s)):dp[i] max(dp[i - 1], dp[i - 2] (ord(s[i])) - 96)return dp[-1] s input() print(dps(s))…

【SpringBoot3.x教程 01】SpringBoot简介及工程搭建

前言:什么是SpringBoot? SpringBoot是一个开源的Java基础框架,它被设计来简化Spring应用的初始搭建以及开发过程。这个框架利用了“约定优于配置”的理念,提供了一系列大型项目中常用的默认配置,让开发者可以快速启动和…

stm32学习笔记:I2C通信外设原理(未完)

软件实现和硬件实现 串口通信为异步时序,用软件实现很麻烦,基本上用硬件实现 而I2C协议通信为同步时序,软件实现简单且灵活,硬件实现比较麻烦,故软件比较常用 但I2C硬件实现功能比较大,执行效率高&#xff…

【OpenCV C++】将float数据和字符串一起打印在iamge上 ,stringstream数值转字符串 VS sprintf_s 数值转字符串

文章目录 1 功能需求2 函数实现2.1 image_utils.h文件2.2 image_utils.cpp方法1—— 用stringstream 将 float 值转换为字符串2.3 函数调用3 image_utils.cpp方法2—— 用 sprintf_s()将 float 值转换为字符串3.2 两种float 转换方法对比——stringstream转换 VS sprintf_s 转换…

Linux clock命令教程:如何查看和设置硬件时钟(附实例详解和注意事项)

Linux clock命令介绍 clock命令是用于查看和设置硬件时钟的信息。硬件时钟是由BIOS设置的,用于在系统关闭时保持时间。 Linux clock命令适用的Linux版本 clock命令在大多数Linux发行版中都可以使用,包括Debian、Ubuntu、Alpine、Arch Linux、Kali Lin…

【数据分享】1984~2020年中国长时间序列逐年人造夜间灯光数据集

各位同学们好,今天和大伙儿分享的是1984~2020年中国长时间序列逐年人造夜间灯光数据集。如果大家有下载处理数据等方面的问题,您可以私信或评论。 张立贤, 任浙豪, 陈斌, 宫鹏, 付昊桓, 徐冰. (2021). 中国长时间序列逐年人造夜间灯光数据集(…

大数据开发-Hadoop分布式集群搭建

大数据开发-Hadoop分布式集群搭建 文章目录 大数据开发-Hadoop分布式集群搭建环境准备Hadoop配置启动Hadoop集群Hadoop客户端节点Hadoop客户端节点 环境准备 JDK1.8Hadoop3.X三台服务器 主节点需要启动namenode、secondary namenode、resource manager三个进程 从节点需要启动…