当前位置: 首页 > news >正文

使用Nginx作为反向代理和负载均衡器

💓 博客主页:瑕疵的CSDN主页
📝 Gitee主页:瑕疵的gitee主页
⏩ 文章专栏:《热点资讯》

使用Nginx作为反向代理和负载均衡器

    • 引言
    • Nginx 简介
      • 安装 Nginx
        • Ubuntu
        • CentOS
      • 配置 Nginx 作为反向代理
      • 配置 Nginx 作为负载均衡器
      • 高级配置
        • 会话持久性
        • 健康检查
      • 监控和日志
      • 总结

引言

Nginx 是一个高性能的 HTTP 和反向代理服务器,广泛应用于 Web 服务中。它不仅能够处理静态内容,还可以作为反向代理和负载均衡器来分发请求。本文将详细介绍如何使用 Nginx 作为反向代理和负载均衡器,提高系统的可用性和性能。

Nginx 简介

Nginx 是由 Igor Sysoev 于 2002 年创建的开源项目。它以其高性能、稳定性、丰富的功能和低资源消耗而闻名。Nginx 主要用于提供 Web 服务、反向代理、负载均衡和缓存等功能。

安装 Nginx

在大多数 Linux 发行版中,可以通过包管理器安装 Nginx。以下是 Ubuntu 和 CentOS 的安装方法:

Ubuntu
```bash
sudo apt update
sudo apt install nginx


<div class="cl-preview-section"><h4><a id="4_19"></a>CentOS</h4></div>```bash
sudo yum install epel-release
sudo yum install nginx

配置 Nginx 作为反向代理

反向代理是一种服务器,它位于客户端和后端服务器之间,客户端发送的请求首先到达反向代理服务器,然后由反向代理服务器转发到后端服务器。Nginx 可以非常方便地配置为反向代理。

假设我们有一个后端服务运行在 127.0.0.1:5000,我们希望 Nginx 将所有请求转发到这个地址。

  1. 编辑 Nginx 配置文件
    通常,Nginx 的主配置文件位于 /etc/nginx/nginx.conf,而站点配置文件位于 /etc/nginx/sites-available/default。我们可以编辑 default 文件来配置反向代理。

    server {listen 80;server_name example.com;location / {proxy_pass http://127.0.0.1:5000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
    }
    
  2. 测试配置文件
    在重新加载 Nginx 之前,最好先测试配置文件是否正确。

    sudo nginx -t
    
  3. 重新加载 Nginx
    如果配置文件没有错误,可以重新加载 Nginx 以应用更改。

    sudo systemctl reload nginx
    

配置 Nginx 作为负载均衡器

负载均衡器可以将请求分发到多个后端服务器,从而提高系统的可用性和性能。Nginx 支持多种负载均衡算法,如轮询、最少连接数、哈希等。

假设我们有两个后端服务分别运行在 127.0.0.1:5000127.0.0.1:5001,我们希望 Nginx 将请求均匀分发到这两个服务。

  1. 编辑 Nginx 配置文件
    default 文件中添加一个 upstream 块来定义后端服务器池。

    upstream backend {server 127.0.0.1:5000;server 127.0.0.1:5001;
    }server {listen 80;server_name example.com;location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
    }
    
  2. 测试配置文件
    同样,我们需要测试配置文件是否正确。

    sudo nginx -t
    
  3. 重新加载 Nginx
    如果配置文件没有错误,可以重新加载 Nginx 以应用更改。

    sudo systemctl reload nginx
    

高级配置

会话持久性
在某些情况下,我们希望同一个客户端的请求总是被转发到同一个后端服务器。这称为会话持久性或粘性会话。Nginx 支持基于 IP 地址的会话持久性。

upstream backend {ip_hash;server 127.0.0.1:5000;server 127.0.0.1:5001;
}

健康检查
Nginx 可以配置健康检查,自动检测后端服务器的状态,并在服务器不可用时将其从负载均衡池中移除。

upstream backend {server 127.0.0.1:5000;server 127.0.0.1:5001;health_check;
}

监控和日志

Nginx 提供了详细的日志功能,可以帮助我们监控服务器的性能和状态。

  1. 访问日志
    访问日志记录了每个请求的详细信息。

    access_log /var/log/nginx/access.log;
    
  2. 错误日志
    错误日志记录了 Nginx 运行过程中遇到的错误。

    error_log /var/log/nginx/error.log;
    

总结

通过本文,你已经学会了如何使用 Nginx 作为反向代理和负载均衡器。Nginx 的强大之处在于其高性能、稳定性和丰富的功能。掌握这些知识将有助于你在实际工作中更好地利用 Nginx 来提高系统的可用性和性能。
Nginx 反向代理架构图

Nginx 作为反向代理和负载均衡器,能够显著提高系统的可用性和性能。
Nginx 负载均衡架构图

相关文章:

使用Nginx作为反向代理和负载均衡器

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Nginx作为反向代理和负载均衡器 引言 Nginx 简介 安装 Nginx Ubuntu CentOS 配置 Nginx 作为反向代理 配置 Nginx 作为负载…...

【数据结构二叉树】C非递归算法实现二叉树的先序、中序、后序遍历

引言: 遍历二叉树&#xff1a;指按某条搜索路径巡访二叉树中每个结点&#xff0c;使得每个结点均被访问一次&#xff0c;而且仅被访问一次。 除了层次遍历外&#xff0c;二叉树有三个重要的遍历方法&#xff1a;先序遍历、中序遍历、后序遍历。 1、递归算法实现先序、中序、后…...

解决网盘资源搜索难题的利器——全面解析哎哟喂啊盘搜及其优秀推荐平台

海量的资源让我们的选择更加丰富,但同时也带来了资源搜索的诸多痛点。无论是寻找最新的影视资源、软件工具,还是各类学习资料,用户常常面临以下几个问题: 资源更新不及时:很多平台资源更新缓慢,用户难以第一时间获取最新内容。 搜索效率低下:关键词搜索不精准,导致需要翻阅大量…...

草料二维码:低成本高效率的访客管理解决方案

在当前的商业和政治环境中&#xff0c;企业和政府机构越来越重视安全保密措施&#xff0c;尤其是对外来人员的行踪记录和管理。访客管理已成为企业运营中不可或缺的一环&#xff0c;它不仅提升了安全性&#xff0c;还增强了效率和便捷性。然而&#xff0c;许多机构仍在使用传统…...

qt管理系统框架(好看界面、漂亮界面、好看的界面、漂亮的界面)

概述 最近一个项目用QT开发&#xff0c;然后找了美工帮设计了下界面。总算完工&#xff0c;后想一下干脆抽出一个基础框架&#xff0c;方便以后用。 功能 支持mysql、echarts。 支持加载动态权限菜单&#xff0c;轻松权限控制。 支持遮罩对话框、抽屉 支持开机启动动画界面 内…...

在VSCode中读取Markdown文件

在VSCode安装Markdown All in One或Markdown Preview Enhanced即可 插件Markdown All in One GitHub&#xff1a;https://github.com/yzhang-gh/vscode-markdown v3.6.2下载链接&#xff1a;https://marketplace.visualstudio.com/_apis/public/gallery/publishers/yzhang/vs…...

Linux rabbitmq客户端 SimpleAmqpClient 源码编译

SimpleAmqpClient的编译成库&#xff0c;加入到工程中 1、下载SimpleAmqpClient 源码&#xff1a; git克隆的路径为&#xff1a;https://github.com/alanxz/SimpleAmqpClient.git 下载压缩包路径&#xff1a;https://codeload.github.com/alanxz/SimpleAmqpClient/zip/maste…...

一台手机可以登录运营多少个TikTok账号?

很多TikTok内容创作者和商家通过运营多个账号来实现品牌曝光和产品销售&#xff0c;这种矩阵运营方式需要一定的技巧和设备成本&#xff0c;那么对于很多新手来说&#xff0c;一台手机可以登录和运营多少个TikTok账号呢&#xff1f; 一、运营TikTok账号的数量限制 TikTok的官…...

Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 房屋信息详情 个人中心 管理员登录界面 管理员功能界面 用户管理界面 房屋信…...

k8s Service四层负载:服务端口暴露

在 Kubernetes 中&#xff0c;通过 Service 可以实现四层&#xff08;L4&#xff09;负载均衡&#xff0c;将流量分发至后端的 Pod。四层负载主要用于传输层&#xff08;TCP/UDP&#xff09;&#xff0c;而不像七层负载均衡&#xff08;HTTP/HTTPS&#xff09;那样进行应用层的…...

QT 关于mousePressEvent无法过滤

QT 关于mousePressEvent无法过滤 bool Filter::eventFilter(QObject *watched, QEvent *event) {// 判断是不是点击事件if((event->type() QEvent::MouseButtonPress) || (event->type() QEvent::MouseButtonDblClick)){//打印一个全局变量static int globalVar 0;gl…...

【VScode】深度对比:Cursor与VScode(CodeMoss)工具,谁才是你的GPT编程最佳助手?

文章目录 一、Cursor的强大功能1.1 Cursor的主要特点1.2 Cursor的使用技巧 二、CodeMoss的功能2.1 CodeMoss的主要特点2.2 CodeMoss的使用技巧 三、Cursor与CodeMoss的对比分析3.1 功能对比3.2 性能对比 四、总结与展望 在科技迅猛发展的今天&#xff0c;AI编程工具如雨后春笋般…...

大数据计算里的-Runtime Filter

文章目录 Runtime Filter示例 Runtime Filter 从纸面意义来看&#xff0c;就是程序在运行时&#xff0c;根据实际的数据去进行一些过滤操作。这和静态的规则优化不同&#xff0c;静态优化不考虑实现的数据的分布。 示例 select a.* ,b.* a join b on a.idb.id假设一下数据…...

【工具变量】大数据管理机构改革DID(2007-2023年)

数据简介&#xff1a;数字ZF是指以新一代信息技术为支撑&#xff0c;重塑政务信息化管理架构、业务架构、技术架构的现代化治理模式。随着数字政府的建设&#xff0c;特别是借助大数据等新一代数字技术&#xff0c;极大地提升了政府的治理能力&#xff0c;从而起到辅助监管机构…...

Linux -- 初识信号

目录 什么是信号&#xff1f; 如何使用信号&#xff1f; 代码&#xff1a; testSig.cc makefile&#xff1a; 验证&#xff1a; 2号信号&#xff1a; 9号信号&#xff1a; 建立对信号的认识&#xff1a; 信号的处理 自定义信号的处理方式&#xff1a; signal 函数…...

Ubuntu系统如何实现键盘按键映射到其他按键(以 Ctrl+c 映射到 F3,Ctrl+v 映射到 F4 为例)

文章目录 写在前面1. 功能描述2. 实现步骤2.1 安装AutoKey2.2 软件设置2.2.1 软件设置 2.3 测试是否安装成功 参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 1. 功能描述 Ubuntu系统使用Ctrlc 、Ctrlv 进行复制粘贴操作的时候&#xff0c;时间长了就会出现小拇指…...

el-select、el-autocomplete的选项内容过长显示完整内容

问题&#xff1a; el-select、el-autocomplete的选项内容过长需要看清完整内容 解决方案&#xff1a; 使用el-popover悬停显示完整内容 代码&#xff1a; <el-form-item label"备注" prop"remark"><el-autocomplete v-model"form.remar…...

Go-单元测试

单元测试 测试用例的命名必须是以xxx_test.go的格式 测试用例函数必须以TestXxx开头&#xff0c;一般来说是Test被测试函数名&#xff0c;且必须为大驼峰命名 TestAdd(t *tesing.T)的形参类型必须是*tesing.T 运行测试用例指令 cmd>go test 运行正确&#xff0c;无日志&a…...

【Linux】IPC 进程间通信(一):管道(匿名管道命名管道)

✨ 无人扶我青云志&#xff0c;我自踏雪至山巅 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#…...

Kotlin类与对象

类的定义与对象创建 类的创建是比较简单的&#xff0c;主要是看一下注意点&#xff1a; 1.如果主构造函数没有任何注释或可见性修饰符&#xff0c;则可以省略constructor关键字&#xff0c;如果类中没有其他内容要写&#xff0c;可以直接省略花括号&#xff0c;最后就变成下面…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...