微服务实战系列之Nginx
前言
Nginx?写了那么多文章,为什么今天才轮到它的表演?那是因为它实在太重要了,值得大书特书,特别对待。
当我们遇到单点瓶颈,第一个idea是?Nginx;
当我们需要反向代理,第一个idea是?Nginx;
当我们需要静态部署,第一个idea是?Nginx;
当我们需要透传服务,第一个idea是?Nginx;
好了好了,不再罗列了,博主手都麻了…
当我们遇到一件趁手的
武器,是不是愿意找一个合适的“对手”,练一练?
当我们遇到一件棘手的问题,是不是愿意找一个熟练的“队友”,试一试?
答案是肯定的,毕竟我们都愿意“百尺竿头,更进一步”,不希望“按部就班,坐以待毙”。
在Nginx正式表演前,博主首先让它的“队友们”报个到,欢迎三连,有求必应:
- 微服务实战系列之Feign
- 微服务实战系列之Sentinel
- 微服务实战系列之Token
- 微服务实战系列之Nacos
- 微服务实战系列之Gateway
- 微服务实战系列之加密RSA
- 微服务实战系列之签名Sign
话锋一转,请允许博主带着大家熟悉Nginx,探索它的奥秘。

一、前世
Nginx是一款轻量级的Web 服务器以及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好。
通过一段标准语言,我们可以大致了解到Nginx几个特征:
1. 反向代理
2. Web服务器
3. 邮件代理服务
4. 并发
5. 轻量级
当然,博主尝试将其翻译成工程实践语言,大致可以包括以下几个功能:
1. 代理服务(反向、邮件)
2. Web服务(面向前端)
3. 负载均衡(高并发)
4. 缓存服务(静态资源)
通过以上的应用场景,博主继续带着大家剖析Nginx,探究一下它为何如此迷人。
二、今生
1. 代理服务
谈到代理服务,各位盆友首先想到什么?
比如小花一个消息,今天没空,让你帮她买个零食…
比如小芳一通电话,今天请假,让你帮她取个快递…
诸如此类,皆算代理的范畴,原因是什么?因为不管小花小芳,还是你,都能够基于同一个方法完成一件事。通俗讲,就是“代劳”。这个时候,小花小芳都是采用了代理服务,而且是正向代理,那么你就是“正向代理服务器”。

既然有正向代理,自然就有反向代理了,因为讲究对称嘛(暗然自喜)~
反向代理是怎么回事?无非是你要吃的,我事先替你备齐,你自取。如此这般,方便你我他,相亲相爱一家人。

所以,自从有了代理这个业务,这世上似乎“懒人”变多了,当然生活品质也提高了。
Nginx如何配置代理,可参考以下:
server{location /api/ {proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header REMOTE-HOST $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/; //这句很关键}
}
2. Web服务
提到Web服务,博主首先会联想到从早年的Apache、IIS,到如今的Nginx、Tomcat、WebLogic等等。不禁有感而发:“变化的始终是工具,不变的是永恒的服务”。
Nginx作为Web服务器,主要做什么呢?
比如部署一套vue,比如上传一组图片资源等等,可以通过http访问即可。如果不清楚怎么使用,可以参考以下配置,指定访问目录即可:
server{location / {root /usr/local/html; //这句很关键try_files $uri $uri/ /index.html;index index.html index.htm;}
}
3. 负载均衡
负载均衡?好像在哪里提过?对了, 网关。如有兴趣,请回看博主相关介绍。
正因为Nginx有这个作用,所以在微服务中,Nginx的任务相当艰巨,所谓能力越大,责任越大,当然期望越高。

如何配置?可参考如下:
http {upstream myserver {server 192.168.1.11:8080 weight=10;//设置权重server 192.168.1.12:8081 weight=10;}server {listen 80;// 默认端口server_name 192.168.1.10;location / {proxy_pass http://myserver;root /usr/local/html;index index.html index.htm;}
}
4. 缓存服务
Nginx也可以做缓存?答案是的。
某些场景下,Nginx需要Worker到服务中获取数据并返回客户端,在高并发场景下,我们可以将这些数据缓存到Nginx中。
如何配置,可参考如下:
http {# 设置缓存路径、目录层级(1:2 表示两个子目录)、内存zone的名字和内存大小# 缓存有效时间、硬盘最大存储大小、缓存文件直接写到cache文件中而不使用temp_pathproxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=ngxcache:100m inactive=7d max_size=1g use_temp_path=off;server { proxy_cache ngxcache;proxy_cache_valid 200 304 5m;proxy_cache_valid 301 302 2m;proxy_cache_min_uses 1;# 添加一个响应头,用来标识请求是否命中缓存add_header N-Cache-Status $upstream_cache_status;proxy_cache_methods GET HEAD;proxy_cache_convert_head on;proxy_cache_key $scheme$host$uri$is_args$args;proxy_cache_background_update on;}
}
综上,关于Nginx,博主带着各位盆友进行功能剖析,旨在一文把握它的命脉。如果还需了解更详细的内容,可参考官网文档,了解每个参数的配置的意义,博主不再啰嗦了。
结语
微服务盛行于当下,好比日出东方之时,趁着朝霞,获得希望。
各位盆友,GoodNight!

相关文章:
微服务实战系列之Nginx
前言 Nginx?写了那么多文章,为什么今天才轮到它的表演?那是因为它实在太重要了,值得大书特书,特别对待。 当我们遇到单点瓶颈,第一个idea是?Nginx; 当我们需要反向代理,…...
使用rsync从OpenShift的pod复制文件
环境 Red Hat Enterprise Linux release 8.6 (Ootpa)OCP 4.12.22 准备 安装rsync: yum install rsync 查看pod: [rootapi.kai1123.cp.fyre.ibm.com ~]# oc get pod -n cpd-instance | grep dmc ...... ibm-dmc-1700727413211000-monitor-0 …...
解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题
总结/朱季谦 楼主最近在做公司的工作流平台,发现一个很无语的事情,Activiti5.22的流程图在Windows环境上部署,是可以正常查看的,但发布到公司的Linux服务器上后,在上面进行流程图在线部署时,发现中文都变成…...
EMG肌肉电信号处理合集(三)
本文主要展示常见的肌电信号预处理的实现,开发环境为matlab。 目录 1 肌电信号低通,高通,带通滤波 2 去除DC 0阶偏置,1阶偏置 3 全波整流 4 信号降采样 5 linear envolope / butterworth 低通滤波器 1 肌电信号低通…...
GitHub桌面版
GitHub桌面版 一、GitHub 桌面版二、clone 仓库三、更新仓库 一、GitHub 桌面版 二、clone 仓库 三、更新仓库...
【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界
在这个充满科技魅力的时代,我们可以通过各种方式去了解和探索自然界的奥秘。而昆虫作为地球上最为丰富多样的生物群体之一,其独特的生活习性和形态特征一直吸引着人们的目光。 由广州华锐互动开发的昆虫3D虚拟动态展示系统,成为了一种全新的科…...
《QT从基础到进阶·三十六》QWidget实现收缩栏的效果
功能: 1、可以在收缩栏插件中添加界面 2、可以把界面展开或收缩 3、可以用鼠标拖动界面改变界面的排放顺序 源码放在最下方 1、可以在收缩栏插件中添加界面 virtual void addWidget(QWidget* widget, const QString& label, const QIcon& icon QIcon())…...
运行软件报错找不到vcruntime140.dll无法继续执行代码怎么办-6个解决方法
vcruntime140.dll是一个由Microsoft Visual C提供的运行时库文件,它为许多Microsoft Visual Studio开发的应用程序提供了必要的支持。这个文件对于许多Windows应用程序的正常运行至关重要。然而,有时会出现vcruntime140.dll缺失的问题,导致应…...
从Discord的做法中学习 — 使用Golang进行请求合并
正如你可能之前看到的,Discord去年发布了一篇有价值的文章,讨论了他们成功存储了数万亿条消息。虽然有很多关于这篇文章的YouTube视频和文章,但我认为这篇文章中一个名为“数据服务为数据服务”的部分没有得到足够的关注。在这篇文章中&#…...
【教3妹学编程-算法题】统计和小于目标的下标对数目
2哥 : 3妹,OpenAI的宫斗剧迎来了大结局!OpenAI宣布阿尔特曼复职CEO,董事会重组 3妹:啊?到底谁才是幕后操纵者啊,有咩有揪出来 2哥 : 也不是很清楚,据说在被开除的几周前,前CEO曾谴责…...
OSG粒子系统与阴影-雾效模拟(1)
虚拟现实中有很多效果,如雨效、雪效、雾效等,这些都可以通过粒子系统来实现。一个真实的粒子系统的模式能使三维场景达到更好的效果。 本章对OSG粒子系统的使用以及生成自定义粒子系统的方法进行了详细介绍最后还附带说明了阴影的使用方法。在实时的场景…...
Windows power shell for循环
有时候需要重复执行某个shell命令 for($i1;$i -lt 10;$i$i1){echo $i}如果是cmd for /l %i in (1,1,5) do echo %i...
GIT实践与常用命令---回退
实践场景 场景1 回退提交 在日常工作中,我们可能会和多个同事在同一个分支进行开发,有时候我们可能会出现一些错误提交,这些错误提交如果想撤销,可以有两种解决办法:回退( reset )、反做(revert) keywords:reset、rev…...
Python-Django的“日志功能-日志模块(logging模块)-日志输出”的功能详解
01-综述 可以使用Python内置的logging模块来实现Django项目的日志记录。 所以与其说这篇文章在讲Django的“日志功能-日志模块-日志输出”,不如说是在讲Pthon的“日志功能-日志模块-日志输出”,即Python的logging模块。 下面用一个实例来进行讲解。 …...
C现代方法(第23章)笔记——库对数值和字符数据的支持
文章目录 第23章 库对数值和字符数据的支持23.1 <float.h>: 浮点类型的特性23.2 <limits.h>: 整数类型的大小23.3 <math.h>: 数学计算(C89)23.3.1 错误23.3.2 三角函数23.3.3 双曲函数23.3.4 指数函数和对数函数23.3.5 幂函数23.3.6 就近舍入、绝对值函数和取…...
NSGA-II求解微电网多目标优化调度(MATLAB)
一、NSGA-II简介 NSGA-Ⅱ算法是Kalyanmoy Deb等人于 2002年在 NSGA 的基础上提出的,它比 NSGA算法更加优越:它采用了快速非支配排序算法,计算复杂度比 NSGA 大大的降低;采用了拥挤度和拥挤度比较算子,代替了需要指定的…...
7-9 jmu-python-班级人员信息统计
7-9 jmu-python-班级人员信息统计 分数 15 作者 郑如滨 单位 集美大学 输入a,b班的名单,并进行如下统计。 输入格式: 第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符。 第2行:&am…...
Doris分区与分桶(八)
接上篇----------Doris 建表示例 Doris 支持两层的数据划分。第一层是 Partition,支持 Range 和 List 的划分方式。第二层是 Bucket(Tablet),仅支持 Hash 的划分方式。 也可以仅使用一层分区。使用一层分区时,只支持…...
mac VScode 添加PHP debug
在VScode里面添加PHP Debug 插件,根据debug描述内容操作 1: 随意在index里面写个方法,然后用浏览器访问你的hello 方法,正常会进入下边的内容 class IndexController {public function index(){return 您好!这是一个[api]示例应用;}public function hello() {phpin…...
53.最大子数组和
原题链接:53.最大子数组和 思路: 只需要判断当前和小于负数 如果小于则舍弃掉子序列即可, 子序列开头从下一个下标位置开始。 全代码: class Solution { public:int maxSubArray(vector<int>& nums) {int max_len I…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
