Nginx反向代理

二级域名系统

image-20240323215058131

顾名思义,我们有很多的这个不同的二级域名的用户来访问我们,比如说微博。它有一个主域名weibo.com。如果我叫一鸣,申请了一个微博,然后我就可以在微博这个主系统上申请一个二级域名来访问我微博的主页,具体实现需要在服务器上把域名的泛解析全部都解析到当前的一台nginx服务器上,nginx可以通过反向代理,把所有的请求转发到后端的另外一台业务服务器,业务服务器拿到这个域名拆解字符串,把这个二级域名取出来,再从数据库里去查询它的信息并展示相应的内容,当然这个域名在数据库里边要存储,并且它是唯一的。

短网址的实现

image-20240323215131846

比如现在有短网址dwz.cn/dskn1267,当用户访问的时候,它会帮我们去跳转到一个真实的网址。短网址系统里先得有一个数据库。db会存储用户提交上来的短网址和真实地址的映射。最简单来说,后缀可以用uuid。uuid返回作为key,真实的地址作为value。全部都存在数据库里。当用户访问到我们的系统的时候,访问到 nginx。nginx通过反向代理,把请求打到后端的应用服务器上。应用服务器获取到用户请求的完整的URL,取到之后我们拆分这串字符串,然后去数据库里去去匹配,拿到真实的地址之后,redirect用户访问的这个地址就被转向了

http DNS

image-20240323215206017

http DNS一般来说不适合浏览器来使用,一般都是给手机的这个APP或者是基于CS架构的,比较适用于http dns,它可以在软件里边预埋几个IP地址,这几个IP地址就是我们的nginx服务器IP地址。在系统启动之后。APP会向这个IP去发起请求,请求某一个域名的真实的IP地址是什么。那我们的系统接到这个请求之后,参数读到域名返回这个IP地址。

Nginx隧道式模型 网关、代理与反向代理

image-20240323223815879

反向代理

用户在访问我们的系统的时候,通过互联网,然后打到机房的这个网关路由上。他会把这个请求转发到具体的一台服务器上,在这个过程当中,我们的网关肯定是能把网络请求打到我们的 nginx 服务器上,它作为反向代理服务器的话,它需要把用户所有的请求全部转发到我们后端的应用服务器,相应的结果再反馈给 nginx在传递给用户,这样就叫反向代理。

正向代理
用户主动的想要去上网。透过这个代理服务器才能访问到我们的这个外网。那这个代理服务器就称之为叫正向代理服务器。比如socket 代理服务器,HTTP 代理服务器啊,

正向代理和反向代理对比起来的区别只是我们所在的角度不一样,

网关指的在我们去访问互联网的时候,假如说你拿手机连上了自己家里的路由器,那我就需要去把所有的数据包全部都发送给这个路由器。然后由路由器转发,请求给我们的这个下一跳的这个网络,那我们接触到的第一个呃路由就是我们家里这个路由器,就是我们的网关。

网关就是访问我们网络的入口

特点就是它所有的请求都得转发。都得经过网关.

应用场景

image-20240323230055595

image-20240323230111675

image-20240323230132091

反向代理服务器在我们的系统架构当中的一些应用场景
这是传统项目当中的这个系统架构图,前面是用户,然后经过自己的网络,然后域名解析,经过互联网,然后打到机房内部的这个网关。到这个网关的时候,会中转请求在这里边呢,还会有防火墙。

那 nginx在这就起到了反向代理的作用,用户想要访问内网的任何资源,都必须得通过我这个反向代理服务器。

backend server 就是这个我们的后端的服务器,那 gateway server是网关路由服务器,在里边会有很多这种其他的业务服务器,比如说管理用户注册登录,管理这个商品。价格,管理库存,然后展示商品等等。有数据库服务器测试用的服务器文件,存储服务器,一些逻辑业务服务器,还有这个保证高可用的 ha server服务器,还有这个权限管理的服务器。这 gateway 服务器是把所有的这个业务服务器统一的管理起来,在中间起到了寻找的作用啊,
还有权限服务器,鉴权的作用并不是说所有的请求都能访问某些服务的,你需要经过这个 gateway路由服务器去做一次权限认证,也就是我们这个所有的业务逻辑是放在后端tomcat 上跑。然后这个 nginx 只做这个业务中转请求中转,所有的请求全都打到我们的后端服务器上,这是最简单的应用,也是最传统的应用技术架构,比较适合小型项目,传统项目以及这个传统的互联网项目,像传统项目的一些 ERP、 CRM 、CMS 等等,这些虽然看起来非常庞大,动不动的一个压缩包。就有一两个G大小的这种源代码,看起来非常庞大,但是它的这个并发量其实并不高,如果并发量并不是特别高的话。尤其是给一些内网用户使用的话啊,那我们这种直接代理过去就可以了。

在接触到这种中小型互联网项目的时候,nginx 作为反向代理服务器,它要起到更多的功能了,比如说我要帮我们去伪装一下当前访问的这个地址真实地址,比如想要请求这个item?serviceid=100,这请求呢 URL 打给本来是要给tomcat 的,你直接给了 nginxnginx 能把这个请求直接给我转发过去,让用户正常访问,这是没有问题的,
但是这种暴露 URL 的缺点,其实也是无关大雅的,但是有时候让人看起来好像并不是那么高级,那我们可以把它换成一种展现形式,
比如说/item/100,这 service 其实我没必要暴露给用户,不需要让他知道这是一个什么服务,
然后 ID也不需要让他去传递了,这样看起来更好记一些。
这是 URL rewrite 这个功能,可以把原本这个 URL 呢,给它变成这个/item/100,也就用户在请求这个请求这个 URL 的时候呢。通过 nginx 可以帮我们去转换成真实的 URL,然后把这真实的URL再转发给我们后端的服务器。
这样做还有另外一个好处,就是面向于一些搜索引擎,它可能会看起来你这是一个独立的页面。它权重会更高一些。
然后 nginx 在这里边不光是起到反向代理的作用,还可以起到一些额外的这些功能上,业务逻辑上的作用,比如说。转发一下这个请求,改变一下URL,那这是对于业务逻辑的这种转发,

业务的数据包不会特别大,比如说我就想要一个 json 数据。我就想是提交一下呃,我修改的密码,这份数据那几 k 大小也就够了,所以在这 nginx 比较能扛,它可能一台 nginx 后边对应了数十台这个业务逻辑服务器。
那 如果nginx 后边代理的是文件服务器,同样是业务逻辑转发,那转发到我们的 nginx 上之后, nginx 后边代理的是文件服务器,那这时候的 nginx 很明显就成了瓶颈了。
因为你后端的数据存储服务器的存储的是非常非常多的这种数据,而且数据非常大,比如说一些电影,一些软件啊非常大的这种数据包那它在传这个传递数据的时候,
nginx 就会成为网络的瓶颈。那么如果你想要用 nginx 做反向代理的话,那你就得多配一些 nginx,然后去分组去代理就可以了。

负载均衡

负载均衡就是访问到一个这个服务器,一旦它不可用的时候,它可以把故障转移到另外一台服务器。

反向代理

proxy_pass http://baidu.com;
location / {proxy_pass http://baidu.com/;# proxy_pass root 二选一
}

基于反向代理的负载均衡

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream httpds { # httpds 随意定义 server 192.168.1.102:80;server 192.168.1.103:80;}server {listen       80;server_name  localhost;location / {proxy_pass http://httpds;# root   vod;# index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

负载均衡策略

轮询

默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求。

weight(权重)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream httpds {server 127.0.0.1:8050 weight=10 down;server 127.0.0.1:8060 weight=1;server 127.0.0.1:8060 weight=1 backup;}

down:表示当前的server暂时不参与负载

weight:默认为1.weight越大,负载的权重就越大。

backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

ip_hash

根据客户端的ip地址转发同一台服务器,可以保持回话。

least_conn

最少连接访问

url_hash

根据用户访问的url定向转发请求

fair

根据后端服务器响应时间转发请求

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95527.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95527.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95527.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式系统通信总线全景探秘:从板内到云端

引言 在嵌入式系统设计中,选择合适的通信总线是决定系统性能、成本和可靠性的关键因素。从简单的芯片间通信到复杂的工业网络,不同的总线技术各司其职,形成了嵌入式世界的"交通网络"。本文将深入探讨五种经典且重要的通信技术&…

2022版Unity创建时没有2D灯光(2D Light),没有Global LIght2D怎么办?

简单来说就是你的渲染管线没有升级到URP管线,所以才没有这些2D灯光 如果你的创建灯光和我一样,没有红线划掉的部分,说明你和我的问题一样,看下面的教程可以解决。 1. 确保Unity版本 确保你的Unity版本至少为2019.4或更高版本&…

技术小白如何快速的了解opentenbase?--把握四大特色

1.基本介绍 作为一名计算机专业相关背景的学生,我们或多或者接触过一些数据库,对于数据库肯定是有所了解的; 你可能学习的是和微软的sql server这样的数据库; 你可能接触的更多的是企业级项目开发里面使用的这个mysql数据库&#…

企业微信AI落地:如何选择企业微信服务商?

现在企业用企业微信做客户运营,最怕的不是“没AI工具”,而是“AI用不起来”——要么功能不贴业务场景,员工嫌麻烦不用;要么回复不专业,客户体验差;要么数据不同步,管理者看不到效果。其实解决这…

【学Python自动化】 11 标准库简介 —— 第二部分

一、格式化输出 reprlib 模块 提供定制版 repr(),缩略显示大型或深层嵌套对象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模块 美化输出,添加换行和缩进显示复杂数据结构impor…

【Kubernetes】知识点2

15. 什么是Pod的根容器?答:Pod 的根容器是每个 Pod 中默认存在的一个特殊容器pause容器,有时也称为infra容器,它是Pod 启动时创建的第一个容器,也是整个 Pod中所有容器的 “父容器”。其核心作用是为 Pod 内的所有容器…

视频增强AI哪个效果好?实战对比帮你找到最适合的工具

hitpaw 牛小影hitpaw 牛小影在处理低质量视频时,我们经常会遇到画面模糊、噪点过多、分辨率不足等问题,比如老旧视频资料修复、监控录像清晰化、手机拍摄视频画质提升等。这时候,一款好用的视频增强AI软件就成了刚需。下面就为大家盘点几款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 请假申请单public class LeaveBill{/// <summary>/// 申请人/// </summary>public string EmployeeName { get; s…

两个子进程之间使用命名pipe

两个子进程间可以使用命名管道&#xff0c;非常简单。管道如果文件一样存在硬盘中&#xff0c;使用ls可以查看&#xff0c;管道文件0字节。使用fork函数分别创建两个子进程。 一个负责读数据&#xff0c;一个负责写数据。 #define _GNU_SOURCE #include <stdio.h> #inclu…

第一讲、Kafka 初识与环境搭建

一、Kafka 是什么&#xff1f; Apache Kafka 是一个分布式的消息队列&#xff08;Message Queue&#xff09;与流处理平台。 它最早由 LinkedIn 开发&#xff0c;后来捐赠给 Apache 基金会&#xff0c;现已广泛应用于日志收集、实时数据管道和大数据处理。 Kafka 的特点&…

Conda相关的用法

1、背景 此文主要记录conda的一些用法&#xff0c;大部分命令来自ai搜索以及自己的理解。 2、安装conda 2.1 选择 conda 版本 2.1.1 Anaconda 含有 Conda 大量科学计算包&#xff08;NumPy、Pandas、Matplotlib 等&#xff09;适合数据科学、机器学习初学者下载地址&…

数据库选择有讲究?SQLite、PostgreSQL还是MySQL?

不同规模的项目&#xff0c;数据库选择有讲究。大家好&#xff0c;我是技术支持彼得&#xff0c;每天两眼一睁就是为客户解决问题。在日常使用我们的视频平台时&#xff0c;很多用户会问到数据库选择的问题。今天就来详细说说EasyGBS、EasyNVR和EasyCVR三大平台该如何选择数据库…

在VMware的Win10虚拟机中安装使用ENSP

VMware安装Windows10 安装ENSP及相关软件 把安装ENSP所使用的相关复制到已安装好的Windows10虚拟机中&#xff0c;如下图所示。 安装VirtualBox 安装时请确保路径为英文目录&#xff0c;并在出现"安装设备软件"或"Oracle USB设备"提示时选择安装选项。具…

Go 语言面试题详解之接口 (Interface) 详解一文吃透

自古流传着一个传言...在 Go 语言面试的时候必有人会问接口&#xff08;interface&#xff09;的实现原理。这又是为什么&#xff1f;为何对接口如此执着&#xff1f;实际上&#xff0c;Go 语言的接口设计在整体扮演着非常重要的角色&#xff0c;没有他&#xff0c;很多程序估计…

ansible循环+判断(with,loop,when,if,for)

一、文档核心定位 本文档聚焦Ansible自动化运维中的两大核心功能——循环与判断&#xff0c;通过“功能说明完整Playbook代码”的形式&#xff0c;覆盖循环迭代场景&#xff08;列表、字典、文件等&#xff09;、数据处理过滤器&#xff08;字符串、数字、加密等&#xff09;、…

在linux下使用MySQL常用的命令集合

1. 数据库查看和选择-- 查看所有数据库 SHOW DATABASES;-- 选择使用某个数据库&#xff08;需要修改&#xff1a;your_database_name&#xff09; USE your_database_name;-- 查看当前正在使用的数据库 SELECT DATABASE();说明&#xff1a;your_database_name 替换为你要操作的…

mysy2使用

参考链接 https://blog.csdn.net/qq_36525177/article/details/115279468 介绍 要把linux程序在windows上编译&#xff0c;且最好兼容posix标准&#xff0c;就用msys2。 使用 1、先下载安装&#xff0c;我装在D:\mysy2 2、打开vscode&#xff0c;不要切换目录&#xff0c;…

【Protues仿真】基于AT89C52单片机的温湿度测量

目录 0案例视频效果展示 1DHT11温度湿度传感器 1.1传感器简介 1.2引脚定义&#xff08;从左到右&#xff0c;面对网格面&#xff09; 1.3时序 & 校验&#xff08;原理速览&#xff09; 1.4常见故障排查 2 DHT11温度湿度传感器数据 2.1 DHT11温度湿度传感器数据格式…

JavaScript箭头函数与普通函数:两种工作方式的深度解析

文章目录JavaScript箭头函数与普通函数&#xff1a;两种"工作方式"的深度解析 &#x1f3f9;&#x1f19a;&#x1f468;&#x1f4bc;引言&#xff1a;为什么需要箭头函数&#xff1f;核心区别全景图对比表格&#xff1a;箭头函数 vs 普通函数关系示意图一、this绑定…

蓝光三维扫描技术赋能内衣胸垫设计:从精准制造到个性化体验的革新之旅

在竞争激烈的内衣市场中&#xff0c;产品设计的精准性、舒适度和个性化已成为品牌制胜的关键。传统内衣设计依赖主观经验与样品反复调整&#xff0c;不仅周期长、成本高&#xff0c;且难以实现对复杂胸型的精准适配。为应对这一挑战&#xff0c;某知名内衣品牌采用新拓三维XTOM…