微服务实战系列之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_path
	proxy_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!
在这里插入图片描述

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

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

相关文章

jQuery_04 jQuery选择器应用

jQuery中的选择器 1.基本选择器 1.1 id $("#id值") id名称 1.2 class $(".class值") class名称 1.3 标签选择器 $("标签名字") 标签名称 1.4 所有选择器 $("*") 所有标签 1.5 组合选择器 …

DCDC电感发热啸叫原因分析

一、电感发热啸叫原因解析 发热原因&#xff1a;电感饱和&#xff0c;实际使用的电感值<理论电感计算值 原因1&#xff1a;电感选择过小&#xff0c;计算值不合理。 原因2&#xff1a;PCB布局不合理&#xff0c;屏蔽型电感下方应设禁止铺铜区。 啸叫原因&#xff1a; 人耳的…

【IEEE独立出版 | 往届均完成检索】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)

#国际学术会议# 推荐 #广州# 【IEEE独立出版 | 往届均完成检索】2024年第四届消费电子与计算机工程国际学术会议&#xff08;ICCECE 2024&#xff09; 2024 4th International Conference on Consumer Electronics and Computer Engineering 2024年1月12-14日 | 中国广州 会…

Node.js入门指南(二)

目录 http模块 创建http服务端 浏览器查看 HTTP 报文 获取 HTTP 请求报文 设置响应报文 网页资源的基本加载过程 静态资源服务 hello,大家好&#xff01;上一篇文章我们对Node.js进行了初步的了解&#xff0c;并介绍了Node.js的Buffer、fs模块以及path模块。这一篇文章主…

Hibernate的三种状态

1.瞬时状态(Transient) 通过new创建对象后&#xff0c;对象并没有立刻持久化&#xff0c;他并未对数据库中的数据有任何的关联&#xff0c;此时java对象的状态为瞬时状态&#xff0c;Session对于瞬时状态的java对象是一无所知的&#xff0c;当对象不再被其他对象引用时&#xf…

三分钟快速理解 ChatGPT 背后的大模型技术

在过去的十年中&#xff0c;人工智能领域取得了重大突破&#xff0c;其中自然语言处理&#xff08;NLP&#xff09;是其重要子领域之一。NLP使用的模型之一是大型语言模型&#xff08;LLMs&#xff09;。LLMs被设计用于处理大量文本数据&#xff0c;采用先进的神经网络架构&…

【Spring】MyBatis的操作数据库

目录 一&#xff0c;准备工作 1.1 创建工程 1.2 准备数据 1.3 数据库连接字符串 1.4 创建持久层接口UserInfoMapper 1.5 单元测试 二&#xff0c;注解的基础操作 2.1 打印日志 2.2 参数传递 2.3 增&#xff08;Insert&#xff09; 2.4 删&#xff08;Delete&#x…

[网鼎杯 2020 朱雀组]phpweb

看一下源码 应该是输入的date 作为函数&#xff0c;value作为内部参数的值&#xff0c;将date()函数返回的结果显示在页面上 回去看的时候&#xff0c;意外发现页面有了新的跳转&#xff0c;观察一下发现&#xff0c;页面每隔五秒就会发生一次跳转 所以就抓包看看 抓包发现po…

【TL431+场效应管组成过压保护电路】2022-3-22

缘由这个稳压三极管是构成的电路是起到保护的作用吗&#xff1f;-硬件开发-CSDN问答

《数据结构、算法与应用C++语言描述》-代码实现散列表(线性探查与链式散列)

散列表 完整可编译运行代码&#xff1a;Github:Data-Structures-Algorithms-and-Applications/_22hash/ 定义 字典的另一种表示方法是散列&#xff08;hashing&#xff09;。它用一个散列函数&#xff08;也称哈希函数&#xff09;把字典的数对映射到一个散列表&#xff08…

IO口速度影响了什么?

我们在初学单片机的时候都知道单片机GPIO的作用是巨大的&#xff0c;在配置GPIO的时候&#xff0c;结构体初始化里有一个选项是配置输入输出速度的&#xff0c;对于这个速度输出是必须要配置的&#xff0c;输入没有明令说明需不需要配置。 这个速度对于学习过32单片机的都应该知…

jQuery 第十一章(表单验证插件推荐)

文章目录 前言jValidateZebra FormjQuery.validValValidityValidForm BuilderForm ValidatorProgressionformvalidationjQuery Validation PluginjQuery Validation EnginejQuery ValidateValidarium后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&…

C++模拟如何实现vector的方法

任意位置插入&#xff0c;insert的返回值为新插入的第一个元素位置的迭代器&#xff1b;因为插入可能会进行扩容&#xff0c;导致start的值改变&#xff0c;所以先定义一个变量保存pos与start的相对位置&#xff1b;判断是否需要扩容&#xff1b;从插入位置开始&#xff0c;将所…

沉头孔和埋头孔的区别

埋头空和沉头孔的区别在于螺栓孔上部扩孔&#xff1a;沉头孔是直筒结构&#xff1b;埋头孔是四十五度结构&#xff0c;比沉头孔较为平顺。 螺栓孔上部扩孔能容纳螺栓头部&#xff0c;使螺头部不高于周围表面。埋头空和沉头孔只是两种不同的叫法。 沉头孔是 PCB 上的圆柱形凹槽…

AIGC 3D即将爆发,混合显示成为产业数字化的生产力平台

2023年&#xff0c;大语言模型与生成式AI浪潮席卷全球&#xff0c;以文字和2D图像生成为代表的AIGC正在全面刷新产业数字化。而容易为市场所忽略的是&#xff0c;3D图像生成正在成为下一个AIGC风口&#xff0c;AIGC 3D宇宙即将爆发。所谓AIGC 3D宇宙&#xff0c;即由文本生成3D…

C语言——从终端(键盘)将 5 个整数输入到数组 a 中,然后将 a 逆序复制到数组 b 中,并输出 b 中 各元素的值。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int a[5];int b[5];printf("输入5个整数&#xff1a;\n");for(i0;i<5;i){scanf("%d",&a[i]);}printf("数组b的元素值为&#xff1a;\n");for(i4;i>0;i--…

最近iphone手机的交管12123闪退,打不开的解决办法?

苹果手机系统和新版软件不配&#xff0c;终极决绝办法&#xff1a;升级IOS系统就好 可能是手机的内存不足了&#xff0c;因为在使用APP时&#xff0c;需要占用手机的内存&#xff0c;如果手机内存不足以支持软件允许&#xff0c;软件就会闪退。车主可以清理一下手机的内存&…

第一百七十八回 介绍一个三方包组件:SlideSwitch

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"如何创建垂直方向的Switch"相关的内容&#xff0c;本章回中将 介绍SlideSwitch组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

插件预热 | 且看安全小白如何轻松利用Goby插件快速上分

001 前言 各位师傅们好&#xff0c;首先强调一遍我可没做坏事&#xff0c;我只是想学技术&#xff0c;我有什么坏心思呢 回到正题&#xff0c;作为一个初学者&#xff0c;我想和大家分享一下我是如何利用 Goby 进行刷分的经历。大家都知道&#xff0c;刚开始学习的时候&…

C语言之strstr函数的使用和模拟实现

C语言之strstr函数的模拟实现 文章目录 C语言之strstr函数的模拟实现1. strstr函数的介绍2. strstr函数的使用3. strstr的模拟实现3.1 实现思路3.2 实现代码 1. strstr函数的介绍 函数声明如下&#xff1a; char * strstr ( const char * str1, const char * str2 ); strs…