微服务实战系列之Nginx

news/2024/7/7 21:48:00 标签: 微服务, nginx, 负载均衡, 代理, 缓存, web
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

前言

Nginx?写了那么多文章,为什么今天才轮到它的表演?那是因为它实在太重要了,值得大书特书,特别对待。
当我们遇到单点瓶颈,第一个idea是?Nginx;
当我们需要反向代理,第一个idea是?Nginx;
当我们需要静态部署,第一个idea是?Nginx;
当我们需要透传服务,第一个idea是?Nginx;
好了好了,不再罗列了,博主手都麻了…

当我们遇到一件趁手的武器,是不是愿意找一个合适的“对手”,练一练?
当我们遇到一件棘手的问题,是不是愿意找一个熟练的“队友”,试一试?

答案是肯定的,毕竟我们都愿意“百尺竿头,更进一步”,不希望“按部就班,坐以待毙”
Nginx正式表演前,博主首先让它的“队友们”报个到,欢迎三连,有求必应:

话锋一转,请允许博主带着大家熟悉Nginx,探索它的奥秘。

webp#pic_center" alt="在这里插入图片描述" />


一、前世

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的任务相当艰巨,所谓能力越大,责任越大,当然期望越高。
webp#pic_center" alt="在这里插入图片描述" />
如何配置?可参考如下:

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!
在这里插入图片描述


http://www.niftyadmin.cn/n/5211265.html

相关文章

视频直播美颜SDK对比测评,技术深度剖析

美颜滤镜作为直播体验的关键一环,成为直播平台竞争的焦点。在美颜滤镜的背后,不同的视频直播美颜SDK各有千秋,下文,小编将对几个主要的视频直播美颜SDK进行对比测评,并深度剖析其技术特点。 一、美颜SDK简介 首先&a…

【算法专题】滑动窗口—无重复字符的最长子串

力扣题目链接:无重复字符的最长子串 一、题目解析 二、算法原理 解法一:暴力解法(时间复杂度最坏:O(N)) 从每一个位置开始往后枚举,在往后寻找无重复最长子串时,可以利用哈希表来统计字符出现…

MySQL 优化器 Index Condition Pushdown下推(ICP)

ICP 测试 准备数据 CREATE TABLE icp (employee_id int(6) NOT NULL AUTO_INCREMENT,first_name varchar(20) DEFAULT NULL,last_name varchar(25) DEFAULT NULL,email varchar(25) DEFAULT NULL,phone_number varchar(20) DEFAULT NULL,PRIMARY KEY (employee_id) );insert i…

OpenStack云计算平台-块存储服务

目录 一、块存储服务概览 二、安装并配置控制节点 1、先决条件 2、安全并配置组件 3、配置计算节点以使用块设备存储 4、完成安装 三、安装并配置一个存储节点 1、先决条件 2、安全并配置组件 3、完成安装 ​四、验证操作 一、块存储服务概览 OpenStack块存储服务(c…

玻色量子“揭秘”之背包问题与Ising建模

摘要:背包问题(Knapsack problem)是一种组合优化的NP-Complete问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。 背包问题早期…

基于白鲸算法优化概率神经网络PNN的分类预测 - 附代码

基于白鲸算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于白鲸算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于白鲸优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Python使用Paramiko实现SSH管理

paramiko 是一个用于在Python中实现SSHv2协议的库,它支持对远程服务器进行加密的通信。目前该模块支持所有平台架构且自身遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,你可以在Python中实现SSH客户端和服务器&…

医院预约管理系统开发 代码展示 九价疫苗接种预约功能(含小程序源代码)

基于微信小程序的疫苗预约系统让疫苗信息,疫苗预约信息等相关信息集中在后台让管理员管理,让用户在小程序端预约疫苗,查看疫苗预约信息,该系统让信息管理变得高效,也让用户预约疫苗,查看疫苗预约等信息变得…