【Nginx】认识与基本使用 Nginx 实现反向代理、配置负载均衡

news/2024/5/8 8:37:38/文章来源:https://blog.csdn.net/weixin_51367845/article/details/127253399

文章目录

  • 1. Nginx 概述
    • 1.1 Nginx 介绍
    • 1.2 Nginx 下载和安装
    • 1.3 Nginx 目录结构
  • 2. Nginx 命令
  • 3. Nginx 配置文件结构
  • 4. Nginx 具体应用
    • 4.1 部署静态资源
    • 4.2 反向代理
      • 4.2.1 介绍
      • 4.2.2 配置反向代理
    • 4.3 负载均衡
      • 4.3.1 介绍
      • 4.3.2 配置负载均衡
      • 4.3.3 负载均衡策略

1. Nginx 概述

1.1 Nginx 介绍

Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,实际上 Nginx 的并发能力在同类型的网页服务器中表现较好,国内使用 Nginx 的网站有:百度、京东、淘宝、腾讯等。

Nginx 官网:https://nginx.org/

1.2 Nginx 下载和安装

Nginx 官网下载地址:https://nginx.org/en/download.html

Linux 安装 Nginx 过程:

  1. 安装依赖包

    yum -y install gcc pcre-devel zlib-devel openssl openssl-devel
    
  2. 下载 Nginx 安装包

    wget https://nginx.org/download/nginx-1.16.1.tar.gz# 如果未安装 wget 命令,则可以通过以下命令进行安装
    yum install wget
    
  3. 解压

    tar -zxvf nginx-1.16.1.tar.gz
    
  4. 配置 Nginx 安装目录为 /usr/local/nginx

    # 先创建安装的目录
    mkdir -p /usr/local/nginx# 配置安装目录
    cd nginx-1.16.1
    ./configure --prefix=/usr/local/nginx
    

    如果不配置安装的路径,那么安装后可执行文件默认存放在 /usr/local/bin,库文件默认存放在 /usr/local/lib,配置文件默认存放在 /usr/local/etc,其他的资源文件存放在 /usr/local/share

  5. 编译和安装 Nginx

    make && make install
    
  6. 通过以上步骤,Nginx 就已经安装好了,切换到其安装目录我们就能看到以下几个目录[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UoHYOqn5-1665410044644)(C:/Users/bbbbbge/Pictures/接单/1665384178077.png)]

1.3 Nginx 目录结构

安装完 Nginx 后,我们就能看到以下几个目录:

目录说明
conf存放配置文件
html存放静态文件(html、css、js)
logs存放日志文件
sbin存放脚本文件

在这些目录中还有几个重要的文件:

文件说明
conf/nginx.confNginx 配置文件
sbin/nginx二进制文件,用于启动、停止 Nginx 服务

Nginx 目录和文件总览:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioL4S7rw-1665410044645)(C:/Users/bbbbbge/Pictures/接单/1665385377032.png)]

2. Nginx 命令

命令说明
./nginx -v查看 Nginx 版本
./nginx -t检查配置文件正确性
./nginx启动 Nginx 服务
./nginx -s stop停止 Nginx 服务
./nginx -s reload重新加载配置文件(当修改 Nginx 配置文件后,需要重新加载才能生效)

以上命令都需要进入 Nginx 的安装目录的 sbin 目录才能执行,因此执行这些命令的时候其实是有点麻烦的。为了解决这个问题,能够在任何路径都能执行这些命令,可以将 Nginx 的二进制文件的路径配置到系统的环境变量中。

配置方式:

  1. 进入 /etc/profile 文件进行编辑

    vim /etc/profile
    
  2. 在 Path 变量后面追加 nginx 的 sbin 路径

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iwZR1SmI-1665410044646)(C:/Users/bbbbbge/Pictures/接单/1665389355020.png)]

  3. 让修改后的 /etc/profile 立即生效

    source /etc/profile
    

3. Nginx 配置文件结构

Nginx 配置文件(conf/nginx.conf)整体分为三部分:

  • 全局块:和 Nginx 运行相关的全局配置[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gus4QgqJ-1665410044646)(C:/Users/bbbbbge/Pictures/接单/1665399162222.png)]

  • events 块:和网络连接相关的配置[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RAh1fCe-1665410044647)(C:/Users/bbbbbge/Pictures/接单/1665399186574.png)]

  • http 块:代理、缓存、日志记录、虚拟主机配置

    • http 全局块

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jCV2MnN-1665410044647)(C:/Users/bbbbbge/Pictures/接单/1665399213722.png)]

    • server 块

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxXkcYXQ-1665410044648)(C:/Users/bbbbbge/Pictures/接单/1665399237916.png)]

      server 块又可以分成 server 全局块和 location 块。注意:http 中可以配置多个 server 块,每个 server 块又可以配置多个 location 块。

4. Nginx 具体应用

4.1 部署静态资源

Nginx 可以作为静态 web 服务器来部署静态资源。静态资源指在服务端真实存在并且能够直接展示的一些文件,比如 html、css、hs、图片、视频等资源。

相对于 Tomcat,Nginx 处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到 Nginx 中。将静态资源部署到 Nginx 非常简单,只需要将文件复制到 Nginx 安装目录的 html 目录即可。

除此之外,如果有需要还可以对 Nginx 的配置文件的 http 块的 server 块的参数进行指定的修改,参数说明如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1C0ABU6-1665410044648)(C:/Users/bbbbbge/Pictures/接单/1665399259112.png)]

4.2 反向代理

4.2.1 介绍

代理就像是我们去购买海外的东西,找了个中间人帮我们去买物品并且带了回来。

从系统的角度来说,直接访问就是浏览器的请求直接到了最终的服务器,中间没有经过任何的代理服务器,否则就是通过了代理的形式去访问了服务器。

代理(proxy)又分为正向代理(forward proxy)和反向代理(reverse proxy)。

正向代理(forward proxy):

是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

一个正向代理服务器并没有直接响应请求的能力,就像商店不生产方便面一样,它不过是把请求转发到最终的网页服务器上,再把后者的响应再转发给请求者。

那么浏览器只知道最终浏览器的地址,但是如何知道代理服务器在哪呢?

这个需要我们主动的告诉浏览器,即主动配置代理服务器。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问 Internet 的途径。

反向代理(reverse proxy):

反向代理服务器位于用户于目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。

用户不需要知道目标服务器的地址,也无须在用户端做任何设定。

反向代理与正向代理的一个很大区别就是,它不需要客户端去做什么配置,并没有什么配置代理服务器的操作。

如果说正向代理是主动配置,主动走代理,那么反向代理则是”被代理“。从这点上看,反向代理有时又称为“透明代理”,也即是浏览器都不知道自己被代理了,浏览器以为发给它响应的就是最终的网页服务器,其实不过是个“代理”。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zvZj9CSI-1665410044649)(C:/Users/bbbbbge/Pictures/接单/1665406222255.png)]

4.2.2 配置反向代理

配置反向代理只需要修改 nginx.conf 配置文件即可,需要配置的参数如下:

server {listen 81;	# 监听端口server_name localhost;	# 服务器名称location / {proxy_pass http://目标服务器IP:端口号; #反向代理配置,将请求转发到指定服务}
}

配置后记得重新加载配置文件。

4.3 负载均衡

4.3.1 介绍

早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互连网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

  • 应用集群:将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并响应返回数据。
  • 负载均衡器:将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KJxrARvJ-1665410044649)(C:/Users/bbbbbge/Pictures/接单/1665407470894.png)]

4.3.2 配置负载均衡

配置负载均衡只需要修改 nginx.conf 配置文件即可,需要配置的参数如下:

upstream targetserver {		# upstream 指令可以定义一组服务器server 服务器1IP:端口号;server 服务器2IP:端口号;
}server {listen 8080;	# 监听端口server_name localhost;	# 服务器名称location / {proxy_pass http://targetserver;	# 请求转发的一组服务器的名称}
}

配置后记得重新加载配置文件。

4.3.3 负载均衡策略

名称说明
轮询默认方式
weight权重方式,权重越大分配的机率越高
ip_hash依据 ip 分配方式
least_conn依据最少连接方式
url_hash依据 url 分配方式
fair依据响应时间方式
  1. 轮询:默认方式,当刷新浏览器时,会发现目标服务器是被轮流着访问。

    upstream targetserver {		# upstream 指令可以定义一组服务器server 服务器1IP:端口号;server 服务器2IP:端口号;
    }
    
  2. weight:通过分配权重的方式,权重越大分配的机率越高。

    upstream targetserver {		# upstream 指令可以定义一组服务器server 服务器1IP:端口号 weight=10;server 服务器2IP:端口号 weight=5;
    }
    
  3. ip_hash:通过客户端的 ip 地址经过哈希算法来分配到一个服务器上,之后同一个 ip 访问时都会固定的访问一个服务器。

    通过 ip_hash 能够解决 Session 丢失的问题,即用户第一次在A服务器登陆后,如果下次请求访问到B服务器的话,那么登录信息则会丢失。

    upstream targetserver {		# upstream 指令可以定义一组服务器ip_hash;server 服务器1IP:端口号;server 服务器2IP:端口号;
    }
    
  4. least_conn:分配服务器中最少连接的那个。

    upstream targetserver {		# upstream 指令可以定义一组服务器least_conn;server 服务器1IP:端口号;server 服务器2IP:端口号;
    }
    
  5. url_hash:按照访问的 url 经过哈希算法来分配到一个服务器上,之后同一个 url 访问都会访问到固定的一个服务器。

    适合后端服务器作为缓存时使用。

    upstream targetserver {		# upstream 指令可以定义一组服务器hash $request_uri;hash_methond cr32;	# hash 算法server 服务器1IP:端口号;server 服务器2IP:端口号;
    }
    
  6. fair:根据后端服务器的响应时间来分配请求,响应时间短的分配优先。

    upstream targetserver {		# upstream 指令可以定义一组服务器fair;server 服务器1IP:端口号;server 服务器2IP:端口号;
    }
    

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

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

相关文章

Ubuntu开机界面出现“error found when loading /root/.profile”

原因 今天一开始按照一篇文章,想把普通用户的权限提高到最高权限,修改了**/etc/passwd**文件,然后重启,发现之前的用户进不去了,一开机就出现如下信息 解决方法 1、重启虚拟机进入recovery模式(长按shi…

计算机网络-第一章 | 王道考研

目录 一、基本介绍 定义 功能 组成 分类 标准化工作 标准的分类 标准化工作相关组织 二、性能指标 ※ 速率 带宽 ※吞吐量 时延 时延带宽积 往返时延RTT 利用率 三、分层结构 ※ 分层基本规则 正式认识分层 7层OSI参考模型 怎么来的 怎么分的 怎么传的…

<特殊类设计与单例模式>——《C++高阶》

目录 1.请设计一个类,不能被拷贝 2. 请设计一个类,只能在堆上创建对象 3. 请设计一个类,只能在栈上创建对象 4. 请设计一个类,不能被继承 5. 请设计一个类,只能创建一个对象(单例模式) 后记:●由于…

GD32F307VC+WIN10+VSCODE+GCC+JLINK环境build

为了构建Cortex M系列单片机免费开源的开发环境,网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式,下面记录环境搭建的流程。 我这边的PC环境为 WIN10专业版64bit。 工具准备 1. arm-none-eabi-gcc下载及安装 官网下载链接:Downloa…

c++数据结构:数组和向量

线性表: 在数据元素的非空有限集中 存在唯一的一个被叫做“第一个”的数据元素存在唯一的一个被叫做“最后一个”的数据元素除第一个之外,集合中的每个数据元素均只有一个前驱除最后一个之外,每个集合元素均只有一个后继数据结构中线性结构指…

文字识别检测入门(1)

CTPN 优点:对水平文字检测效果超级好 缺点:对扭曲的文字不好 RRPN 在faster的基础上改进 RPN改为RRPN ROI pooling改进为RROI pooling 能解决旋转,但是解决不了弯曲的曲面问题 EAST Anchor free 特征合并,检测不同尺度文本 检测各…

刷爆leetcode第三期 0007~0010

刷爆leetcode第三期 0007~0010 题目一 反转链表解法一解法二题目二 链表的中间节点题目三 链表的倒数第K个节点题目四 合并两个有序链表题目一 反转链表 解法一 给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。 示例 1&#xff1a…

python与人工智能:线性回归和逻辑回归

线性回归 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用 十分广泛。梯度下降? 梯度下降法的基本思想可以类比为一个下山的过程。 假设这样一个场景:一个人被困在山上&a…

零拷贝总结

数据交互模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqLJVb5U-1665401648551)(en-resource://database/1074:1)] 读数据过程: 应用程序要读取磁盘数据,调用 read()函数从而实现用户态切换内核态,这是第 …

论文/机器学习笔记:SENet (Squeeze-and-Excitation Networks)

Image 2017 挑战赛夺冠paper 1 motivation 希望显式地建模特征通道(channel)之间的相互依赖关系 通过学习的方式来自动获取到每个特征通道的重要程度依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特征 2 模型 给定一个输入 x&#xff…

利用phpstudy导入mysql文件

1.创建mysql文件 mysql 常用命令: 打开mysql: mysql -u root -p 查看数据库: show databases; 创建 数据库: create database baseName (数据库名称) 使用数据库: use baseName(数据库名称) 显示表:show tables; 创建表&#xff…

C#【高级篇】 IntPtr是什么?怎么用?

C#学习汇总 - 总目录 C#【高级篇】 IntPtr是什么?怎么用?前言一、IntPtr(IntPointer)的由来二、IntPtr(属于结构体)的说明三、IntPtr的使用示例1、int类型与IntPtr类型之间的转换2、string类型与IntPtr之间…

Java collection集合的体系特点

Java collection集合的体系特点 集合类体系结构 collection单列集合,每个元素(数据)只包含一个值。 Map双列集合,每个元素包含两个值(键值对)。 collection集合体系(常见) colle…

位段是什么玩意?你听说过吗??

当我们学完结构体之后,我们就要好好学学结构体实现位段的能力!!! 目录 一、位段是什么? 二、位段的内存分配 三、位段的跨平台问题 总结 一、位段是什么? 位段的声明和结构体大体相同,但是有两…

【Unity_AssetBundle】(二)AB包资源打包、Asset Bundle Browser工具的使用

1.Asset Bundle Browser包安装 Asset Bundle Browser是AB包打包工具较底版本Unity编辑器: Windows——>Package Mannger——>搜索Asset Bundle Browser进行下载导入即可 较高版本Unity编辑器: 高版本Unity在Addressables功能中封装了AB包功能 安…

Telnet、DHCP、静态路由、等价路由、环回接口、浮动静态路由详解

文章目录前言一、Telnet二、DHCP----动态主机配置协议手工配置缺陷报文类型DHCP租期地址池DHCP中继代理路由信息来源直连路由静态路由优先级数据流量是双向的静态路由的扩展配置等价路由环回接口手工汇总路由黑洞缺省路由空接口路由浮动静态路由前言 一、Telnet Telnet是位于…

【数据结构】 归并排序、 基数排序

目录 一、什么是归并排序? 二、归并排序 三、什么是基数排序? 四、基数排序 五、各种排序的比较 一、什么是归并排序? 归并排序是建立在归并操作上的一种有效,稳定的排序算法。是将已有序的子序列合并,得到完全有…

09-Pawn类 UE4 C++

1.首先创建一个C的Pawn类 右键点击Public,选择新建C类 选择Pawn,然后点击下一步 命名后,点击创建 创建完毕,双击打开MyPawn 2.在MyPawn.h中添加如下代码: UPROPERTY(EditAnywhere) class UStaticMeshComponent* Mes…

SpringCloud-31-Spring Cloud Config微服务与配置文件解耦

11.8 微服务与配置文件解耦 我们可以将之前的子模块中的配置提取出来,托管到gitee上统一管理,这样运维人员维护配置文件就不变动子模块了,实现了模块与配置的解耦。 下面用例子来解释下这种做法的好处 在基础工程spring-cloud-microservice…

热血江湖服务端架设开服搭建教程

热血江湖服务端架设开服搭建教程 玩网游比较多的小伙伴,相信对热血江湖这款游戏也不陌生,摆脱了传统武侠游戏阴暗血腥的游戏风格,提倡一种“明朗而愉快的武侠”精神。画面上即不会太随意又不会过于沉重,画面干净清新。活泼可爱的…