【Nginx】核心概念与安装配置解释

news2024/11/27 10:07:11

文章目录

  • 1. 概述
  • 2. 核心概念
    • 2.1.Http服务器
    • 2.2.反向代理
    • 2.3. 负载均衡
  • 3. 安装与配置
    • 3.1.安装
    • 3.2.配置文件解释
      • 3.2.1.全局配置块
      • 3.2.2.HTTP 配置块
      • 3.2.3.Server 块
      • 3.2.4.Location 块
      • 3.2.5.upstream
      • 3.2.6. mine.type文件
    • 3.3.多虚拟主机配置
  • 4. 总结

1. 概述

Nginx是我们常用的一款Http和反向代理服务器,同时可以作为负载均衡器、邮件代理、HTTP缓存服务。它以其轻量级、高并发的特点广泛应用于各种场景。作为一名研发人员,掌握Nginx的应用和实践非常重要。
本节主要解释一下Nginx中的几个常用核心概念,并聊一聊如何进行安装和配置。

2. 核心概念

下面先对核心概念做一下解释

2.1.Http服务器

最常见的就是作为前端服务的Http服务器,我们的前端项目在发布的时候往往会打包成一组静态文件,而Nginx 可以直接作为一个静态资源(如 HTML 文件、图片、CSS 样式表、JavaScript 脚本等)的 Web 服务器来使用。它能高效地处理对这些静态资源的请求,快速响应客户端,减轻后端应用服务器的负担,提升网站整体的访问速度。
例如vue3+vite项目的打包和配置过程,可以参考我这篇博客:【Vue3实践】(六)Vue3使用vite处理环境变量、打包部署、nginx配置

2.2.反向代理

所谓的代理,就是客户端与服务端不直接交互,而是在中间加入了一层代理层,由代理层对服务请求和相应做转发。我们常说的代理包含两种,正向代理反向代理

  • 正向代理:代理层代理的是客户端,由代理层与服务端做交互,并将信息转发给客户端。
  • 反向代理:代理层代理的是服务端,客户端与代理层交互,而不知道服务端的具体情况。

下面有一幅图来表示正向代理和反向代理的区别:
在这里插入图片描述
简单的说,正向代理就是服务端不知道发起请求的客户端是谁,反向代理就是客户端不知道提供服务的服务端是谁。

2.3. 负载均衡

负载均衡往往是和反向代理共同使用的,当后端有多个服务器在提供相同的服务,Nginx可以按照一定的负载均衡策略,将客户端的请求合理的分配到不同的服务端处理,避免单个服务器负载过高而其他的服务器又非常空闲,从而提高架构整体性能和可用性。

Nginx中常用的负载均衡策略有3种:轮询、加权轮询、IP Hash

  • 轮询:适用于各个服务器性能相近的场景,就是按服务器的顺序,将请求依次转发到不同的服务器处理,假如有ABC三台服务,请求就会按照A,B,C,A,B,C…的顺序依次执行。。
  • 加权轮询:适用于各个服务器性能不同的场景,在轮询的基础上给按性能给服务器分配权重。后续的请求就会趋近于这个权重来进行访问,比如服务器 A 权重为 3,服务器 B 权重为 2,服务器 C 权重为 1,那么在分配请求时,每 6 个请求中,A 会分配到 3 个,B 会分配到 2 个,C 会分配到 1 个,以此体现不同服务器的处理能力差异,将更多请求分配给性能更强的服务器。
  • IP Hash:常用于有状态服务(如需要保持会话状态的应用)的场景,根据客户端的 IP 地址通过哈希算法计算出一个值,然后根据这个值来决定将请求分配到哪台后端服务器上,这样能保证来自同一个 IP 的请求始终被分配到同一台后端服务器。

3. 安装与配置

3.1.安装

Nginx的安装很简单,ubantu可以通过apt,CentOS可以使用yum来进行安装,当然也可以使用Docker安装。Docker的安装方式参考《【Docker】(五)使用bind mounts修改Docker容器中的Nginx配置文件》,里面讲了如何通过Docker安装Nginx并将配置文件挂载出来。

接下来看一下CentOS的安装方式,运行以下脚本:

sudo yum install nginx

执行完成后nginx,就安装好了,可以通过nginx -V(V是大写的)来查看Nginx的信息。
在这里插入图片描述
注:图中高亮显示的部分,就是Nginx的配置文件所在的位置,接下来可以通过nginx指令来启动Nginx。

nginx
# 查看进程
ps -ef | grep nginx

在这里插入图片描述
查看进程后可以看到,有1个master节点和4个worker节点,worker节点数和当前服务器的CPU核心数有关在下面的配置文件解释中会讲到。

3.2.配置文件解释

解释一下nginx.conf这个配置文件中的常用配置项的含义:

3.2.1.全局配置块

全局配置块位于文件的顶部,定义 Nginx 的全局设置,影响整个服务。
在这里插入图片描述

  • user:用户名,自己随便写
  • worker_processes:工作线程数,设置为auto之后,会按照CPU核心数来设置工作线程
  • error_log:保存错误日志的路径
  • pid:记录主进程 PID 的文件路径
  • incluede:引入其他.conf配置文件的位置

事件配置块中:

  • worker_connections:每个工作进程允许的最大连接数

3.2.2.HTTP 配置块


HTTP 块是 Nginx 配置的核心,定义了 Web 服务的行为,包括服务器、路由、缓存等

  • include:加载其他配置文件,实现配置分离。
  • log_format:日志打印的格式
  • access_log:访问日志的路径
  • sendfile:启用高效文件传输模式,用于减少 CPU 和内存占用
  • tcp_nopush:优化 TCP 包的传输,减少网络延迟
  • default_type:未匹配文件类型时的默认 MIME 类型

3.2.3.Server 块

在这里插入图片描述
Server 块用于定义虚拟主机,每个 Server 块对应一个站点。

  • listen:监听的端口号
  • server_name:绑定的域名,可用通配符
  • location:定义 URL 路径规则及对应处理方式
  • root:文件根目录,在直接访问Nginx的虚拟主机端口时,会默认的访问根目录下的index.html
  • index:修改默认访问html文件,一般是index index.html index.htm;
  • error_page:定义错误码及重定向的文件名。

我们打开根目录可以看到,里面就有默认的index.html,404.html,50x.html等文件
在这里插入图片描述

3.2.4.Location 块

Location 是 Server 块的子配置,匹配 URL 路径并定义处理规则。
下面是一个拓展的location块:

location /api/ {
    proxy_pass http://backend_server; # 转发到后端服务器。
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

location ~* \.(jpg|jpeg|png|gif|ico)$ {
    root /usr/share/nginx/images;     # 图片文件存放目录。
    expires 30d;                      # 缓存时间。
}
  • proxy_pass:设置反向代理目标地址,大多数时候是配合upstream一起使用,upstream可以配置负载均衡策略。
  • proxy_set_header:传递自定义请求头给后端。
  • ~*:正则表达式匹配,不区分大小写。
  • expires:设置客户端缓存过期时间。

location中的各种通配符按优先级,如下所示:

  • 精确匹配 (=)。
  • 前缀匹配加通配符 (^~)。
  • 正则表达式匹配 (~ 和 ~*),多个正则时,按照配置文件中先后顺序匹配。
  • 普通前缀匹配(默认,无符号),按路径长度优先。

3.2.5.upstream

upstream 是定义后端服务器组的模块,用于负载均衡和请求分发。它允许您在多个后端服务之间分配请求流量。

  • 轮询配置:
    upstream backend_servers {
        server 192.168.1.101:8080;  # 后端服务器1
        server 192.168.1.102:8080;  # 后端服务器2
        server 192.168.1.103:8080;  # 后端服务器3
    }
    
  • 加权轮询配置:
    upstream backend_servers {
        server 192.168.1.101:8080 weight=3;
        server 192.168.1.102:8080;
    }
    
  • IP HASH 配置:
    upstream backend_servers {
        ip_hash;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
    }
    

upstream一般是写在http块中的,例如:

http {
    upstream backend_servers {
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
    }

    server {
        location /api/ {
            proxy_pass http://backend_servers;
            proxy_cache cache_zone;       # 启用缓存
            proxy_cache_valid 200 302 10m; # 缓存 10 分钟
            proxy_cache_valid 404 1m;     # 404 错误缓存 1 分钟
        }
    }
}

3.2.6. mine.type文件

mime.types 文件用于定义 MIME 类型(Multipurpose Internet Mail Extensions),即文件的内容类型。
Nginx 会根据请求的文件扩展名匹配 mime.types 中定义的 MIME 类型,然后在 HTTP 响应头中包含 Content-Type 字段,告知客户端正确的文件类型
在这里插入图片描述

3.3.多虚拟主机配置

上面我们提到了每个server就是一个虚拟主机,在实际的工作中,我们往往会给不同的业务配置不同的虚拟主机,也就是在Nginx.conf中配置多个server,但是在实践中我们还有一个更优雅的方式。
上面的http块中有这么一行配置include /etc/nginx/conf.d/*.conf;,也就是在conf.d文件夹下导入所有以.conf结尾文件。所以我们就可以针对不同的业务在conf.d目录下新建不同.conf文件就可以了。

4. 总结

本篇讲述了Nginx的核心概念、安装,以及如何修改Nginx的配置文件,涵盖了Nginx入门相关的内容。

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

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

相关文章

AIGC-----AIGC在虚拟现实中的应用前景

AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容(AIGC)的快速发展,虚拟现实(VR)技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性,这种组合不仅极大地降低了VR内容的…

学习笔记035——MySQL索引

数据库索引 索引是为了提高数据的查询速度,相当于给数据进行编号,在查找数据的时候就可以通过编号快速找到对应的数据。 索引内部数据结构:B Tree 主键自带索引。 如: insert into user (id, name) values (1,f); insert int…

C语言数据结构-链表

C语言数据结构-链表 1.单链表1.1概念与结构1.2结点3.2 链表性质1.3链表的打印1.4实现单链表1.4.1 插入1.4.2删除1.4.3查找1.4.4在指定位置之前插入或删除1.4.5在指定位置之后插入或删除1.4.6删除指定位置1.4.7销毁链表 2.链表的分类3.双向链表3.1实现双向链表3.1.1尾插3.1.2头插…

计算机网络 网络安全基础——针对实习面试

目录 网络安全基础你了解被动攻击吗?你了解主动攻击吗?你了解病毒吗?说说基本的防护措施和安全策略? 网络安全基础 网络安全威胁是指任何可能对网络系统造成损害的行为或事件。这些威胁可以是被动的,也可以是主动的。…

上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量

在当今快速发展的物联网市场中,无线连接技术的不断进步对智能设备的性能和能效提出了更高要求。为了满足这一需求,乐鑫科技推出了ESP32-C61——一款高性价比的Wi-Fi 6芯片,旨在为用户设备提供更出色的物联网性能,并满足智能设备连…

初识java(2)

大家好,今天我们来讲讲java中的数据类型。 java跟我们的c语言的数据类型有一些差别,那么接下来我们就来看看。 一.字面常量,其中:199,3.14,‘a’,true都是常量将其称为字面常量。(…

MMCM DRP动态配置方法(超详细讲解)

一、MMCM 源语介绍 1、调用源语 2、调用Clocking Wizard IP 调用Clocking Wizard IP核选择使用MMCM资源时,IP内部也是调用的MMCM源语。 Clocking Wizard IP中启用MMCM DRP接口方法: 在Clocking Wizard IP中设置分频倍频系数方法: IP核中生…

对于GC方面,在使用Elasticsearch时要注意什么?

大家好,我是锋哥。今天分享关于【对于GC方面,在使用Elasticsearch时要注意什么?】面试题。希望对大家有帮助; 对于GC方面,在使用Elasticsearch时要注意什么? 1000道 互联网大厂Java工程师 精选面试题-Java…

Spring Boot 与 Spring Cloud Alibaba 版本兼容对照

版本选择要点 Spring Boot 3.x 与 Spring Cloud Alibaba 2022.0.x Spring Boot 3.x 基于 Jakarta EE,javax.* 更换为 jakarta.*。 需要使用 Spring Cloud 2022.0.x 和 Spring Cloud Alibaba 2022.0.x。 Alibaba 2022.0.x 对 Spring Boot 3.x 的支持在其发行说明中…

在Vue3项目中引入省市区联动插件

1. 打开HBuilder X 图1 2. 新建一个空项目 文件->新建->项目->uni-app 填写项目名称:vue3demo 选择项目存放目录:D:/HBuilderProjects 一定要注意vue的版本,当前选择的版本为vue3 图2 点击“创建”之后进入项目界面 图3 其中各文件…

STM32C011开发(3)----Flash操作

STM32C011开发----3.Flash操作 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置堆栈设置串口重定向FLASH数据初始化FLASH 读写演示 概述 STM32C011 系列微控制器内置 Flash 存储器,支持程序存储与数据保存,具备页面擦除、双字写入…

JVM详解:垃圾回收机制

java作为大型服务开发的主流语言,其运行会占用大量的内存空间,那么合理的使用有限的服务器资源至关重要。和大多数翻译性语言一样,java的运行环境jvm也内置垃圾回收机制,其通过一些合理的算法组合,定时来对堆中保存的不…

【拥抱AI】如何查看Milvus的使用情况?

查看Milvus的使用情况和性能指标可以帮助你了解数据库的健康状况、性能指标和资源使用情况。以下是一些常用的方法和工具,帮助你全面监控和查看Milvus的使用情况和性能指标。 1. 查看日志 Milvus的日志文件记录了运行时的各种信息,包括错误、警告和调…

基于Netty实现聊天室

前言 了解了Netty的基本功能和相关概念,使用基于Netty实现多人聊天的功能。 需求 1.服务端能够接收客户端的注册,并且接受用户的信息注册 2.服务端能够处理客户端发送的消息,并且根据消息类型进行私发或者广播发送消 3.服务端能够私发消…

利用 Jsoup 进行高效 Web 抓取与 HTML 处理

Jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 JQuery 的操作方法来取出和操作数据。 官网:https://jsoup.org/ 中文文档:Jsou…

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件?2. 什么是文件?3. 如何标识文件?4. 二进制文件和文本文件?5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…

004 逻辑变量与运算

当0和1表示逻辑状态时,两个二进制数码按照某种特定的因果关系进行的运算——就叫:逻辑运算 1.二值逻辑变量与基本逻辑运算 逻辑代数: 与普通代数不同,逻辑代数中的变量只有0和1两个可取值,它们分别用来表示完全两个对立的逻辑状态 逻辑运…

Deepnote、JupyterLab、Google Colab、Amazon SageMaker、VS Code对比

功能比较 平台语言支持扩展性数据连接可视化能力DeepnotePython、R、SQL中等,依赖云端支持主要云平台(BigQuery、Snowflake等)内置仪表盘与交互图表JupyterLab多种语言,插件支持广泛极高,完全可自定义使用库&#xff…

网络安全中的数据科学如何重新定义安全实践?

组织每天处理大量数据,这些数据由各个团队和部门管理。这使得全面了解潜在威胁变得非常困难,常常导致疏忽。以前,公司依靠 FUD 方法(恐惧、不确定性和怀疑)来识别潜在攻击。然而,将数据科学集成到网络安全中…

C语言数据结构与算法--简单实现队列的入队和出队

(一)队列的基本概念 和栈相反,队列(Queue)是一种先进先出(First In First Out)的线性表。只 允许在表的一端进行插入,而在另一端删除元素,如日常生活中的排队现象。队列中 允许插入的一端叫队尾…