微服务实战系列之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…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...
