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

文章目录

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的安装方式,运行以下脚本:

bash 复制代码
sudo yum install nginx

执行完成后nginx,就安装好了,可以通过nginx -V(V是大写的)来查看Nginx的信息。

注:图中高亮显示的部分,就是Nginx的配置文件所在的位置,接下来可以通过nginx指令来启动Nginx。

bash 复制代码
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块:

js 复制代码
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 是定义后端服务器组的模块,用于负载均衡和请求分发。它允许您在多个后端服务之间分配请求流量。

  • 轮询配置:

    js 复制代码
    upstream backend_servers {
        server 192.168.1.101:8080;  # 后端服务器1
        server 192.168.1.102:8080;  # 后端服务器2
        server 192.168.1.103:8080;  # 后端服务器3
    }
  • 加权轮询配置:

    js 复制代码
    upstream backend_servers {
        server 192.168.1.101:8080 weight=3;
        server 192.168.1.102:8080;
    }
  • IP HASH 配置:

    js 复制代码
    upstream backend_servers {
        ip_hash;
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
    }

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

js 复制代码
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入门相关的内容。

相关推荐
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--6 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜7 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB8 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode9 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户03284722207010 天前
如何搭建本地yum源(上)
运维
ping某11 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠13 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql