nginx的内置变量以及nginx的代理
nginx的内置变量
客户端
命令 | 含义 |
---|---|
$uri | 可以获取客户端请求的地址,包含主机和查询的参数 |
$request_uri: | 获取客户端的请求地址,包含主机和查询参数。 |
$host: | 请求的主机名,客户端—发送请求的url地址 |
$http_user_agent | 获取客户端请求的浏览器和操作请求 |
$remote_addr | 客户端的IP地址(可以隐藏) |
$remote_port | 客户端的端口 |
$request_method | 获取客户端的的请求方式 |
$request_filename | 获取客户端请求的文件名 |
服务端
命令 | 含义 |
---|---|
$server_addr | 可以查询到服务端的IP地址 |
$server_port | 服务端的端口号 |
$scheme | 获取请求的协议 |
$document_root | 当前请求的根目录 |
nginx在配置location匹配时,会使用两个获取头部的内置变量:
X-Real-IP:直接向服务端发送客户端访问的真实ip地址
proxy_set_header X-Real-IP $remote_addr
X-Forwarded-For:传递完整的代理链,只要数据包经过代理,都会被传送nginx,记录所有的代理地址和客户端的真实ip
proxy_set_header X-Forwarded_For $porxy_add_x_forwarded_for;记录所有经过的代理地址
nginx的代理
代理:访问一个代理的地址就可以指向目标访问的网页
代理的分类
nginx的代理分为欸正向代理和反向代理
正向代理:七层代理
反向代理:七层代理和四层代理
四层代理:传输层:ip+端口
七层代理:应用层:http协议
区别
四层代理和七层代理的区别:
1、四层代理是基于tcp/ip协议层的代理转发方式,只是基于ip+端口号的实现代理
四层代理无法获取http请求中的url信息,只是对数据包进行转发
四层转发数据包,是由内核进行转发,速度都更快。内核态(开发)
2、七层代理是通过http协议进行代理转发的方式
处理http的请求和响应
当收到http请求之后,根据代理的方式,把http请求转发到指定的服务器
可以对http请求进行深入的分析和处理的,可以对请求内容做路由,流量控制,可以内容过滤等等
七层代理的是由应用层处理,用户态来处理,速度相对较慢,但是更安全,更可靠
同时能做四层代理和七层代理的有nginx,Haproxy
lvs只能做四层转发
正向代理
正向代理都是需要对请求进行处理,属于七层代理。
正向代理是面向客户端,客户端想要访问web服务器,但是客户端的ip地址禁止访问,通过代理的ip地址访问目标的服务器。
服务端只会知道代理服务器的地址,但是不知道客户端的ip地址
特点
正向代理的特点:
1、代理的ip地址和访问的服务端对客户端来说是已知的
2、后端服务器不知道客户端的ip地址
配置
正向代理可以进行有多个配置文件
http {
...
include /usr/local/nginx/conf.d/*.conf;
#添加了这一段之后,可以在conf.d这个目录里面,配置多个conf文件,也可以有其他的配置文件,作为服务的配置文件
}
自行代理
vim conf.d/zxdl.conf
server {listen 8888;server_name localhost;resolver 218.2.135.1 valid=300 ipv6=off;#设置dns的解析地址,解析的缓存时间是300秒,每隔300秒重新解析一次resolver_timeout 3s;#设置解析服务的超时3秒proxy_read_timeout 30s;#设置代理服务器读取的超时时间proxy_send_timeout 30s;#代理服务器向后端服务器发送数据的超时时间proxy_connect_timeout 30s;#代理服务器和后端服务器连接的超时时间#固定代理地址set $url "www.baidu.com";location / {proxy_pass http://$url#请求转发的语句#正向代理的缓存配置proxy_buffers 256 4k;#设置后端缓存影响的缓冲区为256个,每个大小为4kproxy_max_temp_file_size 0;#nginx不保存响应数据的临时文件,防止文件过多,占用硬盘空间proxy_cache_valid 200 302 1m;#针对响应码是200和302,缓存的有效期是1分钟proxy_cache_valid 301 1h;#针对响应码是301的,缓存的有效期是1小时proxy_cache_valid any 1m;#除了200,301,302以外,其他的响应码都缓存1分钟}
}
自动代理
vim conf.d/zddl.conf
servere {listen 8889;location / {proxy_pass $scheme://$http_host$requst_uri#请求带了地址自动设置 #自动选择协议 http https#$http_host 目标主机 $request_uri包含完整的请求的路径proxy_set_header Host $http_host;#在请求头当汇总传递客户端的host信息proxy_set_header X_Real_IP $remote_addr#设置客户端的请求当中包含真实的ip地址proxy_set_header X_Forwarded_For $proxy_add_x_forwarded_for;#传递客户端经过的代理地址proxy_set_header X_Forwarded_Proto $scheme;#传递客户端的请求的协议信息http httpsproxy_set_header X_Forwarded_Host $host;#传递客户端的主机名(IP地址)proxy_set_header X_Forwarded_Port $server_port;#传递给服务端,客户端请求服务端的端口resolver 218.2.135.1;#设置dns地址resolver_timeout 10s;proxy_buffers 256 4k;proxy_max_temp_file_size 0;#设置缓存的保存时间proxy_cache_valid 200 302 1m;#针对响应码是200和302,缓存的有效期是1分钟proxy_cache_valid 301 1h;#针对响应码是301,缓存的有效期是1小时proxy_cache_valid any 1m;#除了200,301,302以外,其他的响应码都缓存1分钟。}
}
反向代理
反向代理又叫负载均衡:将四层或者七层的请求分配到多台后端的服务器上,从而分担整个业务的负载,提高系统的稳定性,也可以提供高可用(备灾,其中一台后端服务器如果发生故障不影响整体业务)
负载均衡的算法
1、round robin 轮询:负载均衡的默认算法,请求轮流分配给后端服务器
轮询算法适用于后端服务器处理能力相近的情况,默认的算法,可以不加
2、weight round robin 加权轮询:轮询的升级版,给每个后端服务器赋予不同的权重,处理能力更强的服务器设置更高的权重,处理能力低的,设置低权重
高峰时期可以通过这个方法进行流量的优化,适用于服务器处理能力差异比较大的情况
3、ip_Hash:当我们访问后端服务器,根据客户端的ip地址,使用hash算法计算出ip地址的hash值,然后再把请求发送到相应的后端服务器。
如果客户端访问的ip地址相同,通过hash算法,再一次的请求会被分配到上一次访问的服务器,保证会话的稳定,负载均衡的会话保持---->ip_hash
会话保持到期之后,会话中断,重新请求会重新计算hash值
4、最小连接数(配合加权轮询一块使用):最少链接数的算法可以将请求发送到当前连接比较少的后端服务器
这种算法适用后端服务器处理任务耗时不同的情况,可以有效的避免所有的请求集中在处理能力更强的后端服务器上。
5、URL_HASH:根据请求当中url地址来计算hash值,如果客户端请求的url地址相同,客户端的请求会被分配到用一个服务器上
负载均衡的特点
负载均衡的特点:
1、根据算法把请求分发到不同的服务器
2、客户端访问的是代理地址,响应也是代理服务器响应
3、客户端并不了解后端服务器的情况
4、可以提高安全性,后端服务器时隐藏的
5、负载均衡是有缓存的,可以直接访问缓存提高响应速度
负载均衡的架构
举例:
server-Ubuntu-1 192.168.42.20 代理服务器
server-Ubuntu-2 192.168.42.30 后端1
server-Ubuntu-3 192.168.42.40 后端2
配置流量分发,主要依靠代理服务器完成的,主要配置在代理服务器完成,匹配算法
七层代理
轮询
http {
...upstream xy104 {server 192.168.42.30;server 192.168.42.40;}#声明一个upstream的方法,用来做七层的代理#server声明后端服务器的IP地址location / {#使用七层代理要写在server的location模块当中proxy_pass http://xy104;}
}加权轮询
http {
...upstream xy104 {server 192.168.42.30 weight=3;server 192.168.42.40 weight=1;}#声明一个upstream的方法,用来做七层的代理#server声明后端服务器的IP地址location / {#使用七层代理要写在server的location模块当中proxy_pass http://xy104;}
}ip_hash
http {
...upstream xy104 {ip_hash;server 192.168.42.30;server 192.168.42.40;}#声明一个upstream的方法,用来做七层的代理#server声明后端服务器的IP地址location / {#使用七层代理要写在server的location模块当中proxy_pass http://xy104;}
}最小链接数
http {
...upstream xy104 {least_conn;server 192.168.42.30 weight=3;server 192.168.42.40 weight=1;}#声明一个upstream的方法,用来做七层的代理#server声明后端服务器的IP地址location / {#使用七层代理要写在server的location模块当中proxy_pass http://xy104;}
}URL_hash
http {...upstream xy104 {hash $request_uri consistent;server 192.168.42.30 weight=3;server 192.168.42.40 weight=1;}#声明一个upstream的方法,用来做七层的代理#server声明后端服务器的IP地址location / {#使用七层代理要写在server的location模块当中proxy_pass http://xy104;}
}
根据域名
http {...upstream{server www.xy104.com;server www.xy105.com;}server {server_name www.123.ccc...location /{root html;index index.html;proxy_pass http://xy104;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
四层代理:
stream:不支持http协议,仅支持tcp和udp,处理数据包的流量分发
四层代理需要写在全局模块当中
#安装nginx的时候必须要有支持stream模块
stream {upstream xy104 {server 192.168.42.30:80;server 192.168.42.40:80;}server {listen 81;proxy_pass xy104;}}
四层代理支持:轮询,加权轮询,最小链接数,ip_hash和uri_hash不能在四层算法当中使用
相关文章:
nginx的内置变量以及nginx的代理
nginx的内置变量 客户端 命令含义$uri可以获取客户端请求的地址,包含主机和查询的参数$request_uri:获取客户端的请求地址,包含主机和查询参数。$host:请求的主机名,客户端—发送请求的url地址$http_user_agent获取客户端请求的浏览器和操作…...

ubuntu监测硬盘状态
安装smartmontools smartctl -l error /dev/sdk smartctl -i /dev/sda lshw -class disk smartctl -H /dev/sd 结果1: 结果2:PASSED,这表示硬盘健康状态良好 smartctl -a /dev/sdb sdk lsblk blkid 测试写入速度 time dd if/dev/zero of…...
3.2.1.2 汇编版 原子操作 CAS
基本原理说明 在 x86 和 ARM 架构上,原子操作通常利用硬件提供的原子指令来实现,比如 LOCK 前缀(x86)或 LDREX/STREX(ARM)。以下是一些关键的原子操作(例如原子递增和比较交换)的汇…...

InnoDB事务系统(二):事务的实现
事务隔离性由锁来实现。原子性、一致性、持久性通过数据库的 redo log 和 undo log 来完成。 redo log 称为重做日志,用来保证事务的原子性和持久性。undo log 用来保证事务的一致性。 有的 DBA 或许会认为 undo 是 redo 的逆过程,其实不然。redo 和 u…...
xdoj :模式匹配
模式匹配 题目描述: 接收信号中包含特定的信号模式,对接收信号进行检测,以统计特定模式出现的次数。 例如接收信号为 9 3 5 7 5 8 6 3 5 7 1 9 3 5 7,如果特定信号为 3 5 7,则接收信号中包含了 3 个特定模式。通过键…...

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)
目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的(面试) 上文介绍reids的安装以及基本概念,本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对(KEY - VALUE)存储的…...
LruCache(本地cache)生产环境中遇到的问题及改进
问题:单机qps增加时请求摘要后端,耗时也会增加,因为超过了后端处理能力(最大qps,存在任务堆积)。 版本一 引入LruCache。为了避免数据失效,cache数据的时效性要小于摘要后端物料的更新时间&…...

智慧公交指挥中枢,数据可视化 BI 驾驶舱
随着智慧城市的蓬勃发展,公共交通作为城市运营的核心枢纽,正朝着智能化和数据驱动的方向演进。通过整合 CAN 总线技术(Controller Area Network,控制器局域网总线)、车载智能终端、大数据分析及处理等尖端技术,构建的公交“大脑”…...
【计算机网络】期末考试预习复习|上
作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为: A: (–1 –1 –1 1 1 –1 1 1);B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1);D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列:(–1 1 –…...

YOLOv8目标检测(四)_图片推理
YOLOv8目标检测(一)_检测流程梳理:YOLOv8目标检测(一)_检测流程梳理_yolo检测流程-CSDN博客 YOLOv8目标检测(二)_准备数据集:YOLOv8目标检测(二)_准备数据集_yolov8 数据集准备-CSDN博客 YOLOv8目标检测(三)_训练模型:YOLOv8目标检测(三)_训…...

AI工具如何深刻改变我们的工作与生活
在当今这个科技日新月异的时代,人工智能(AI)已经从科幻小说中的概念变成了我们日常生活中不可或缺的一部分。从智能家居到自动驾驶汽车,从医疗诊断到金融服务,AI正以惊人的速度重塑着我们的世界。 一、工作方式的革新…...

springboot中——Logback介绍
程序中的日志,是用来记录应用程序的运行信息、状态信息、错误信息等。 Logback基本使用 springboot的依赖自动传递了logback的依赖,所以不用再引入依赖 之后在resources文件下创建logback.xml文件,写入 <?xml version"1.0" …...

【Tomcat】第一站:理解tomcat与Socket
目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解: 2. 计算机网络最基本的流程 2.1 信息是怎么来的? 2.2 端口是干什么的? 3. 简单的Socket案例 服务端 客户端 启动: 3.2 在Tomcat发送信息,看…...

TQ15EG开发板教程:使用SSH登录petalinux
本例程在上一章“创建运行petalinux2019.1”基础上进行,本例程将实现使用SSH登录petalinux。 将上一章生成的BOOT.BIN与imag.ub文件放入到SD卡中启动。给开发板插入电源与串口,注意串口插入后会识别出两个串口号,都需要打开,查看串…...
Java从入门到工作4 - MySQL
一:检测数据库网络 telnet 127.0.0.1 3306 注意ip和端口后之间是空格,不需要引号 二:SQL语法 1、创建结果集 SELECT 电视机 AS typeUNION SELECT 电冰箱UNION SELECT 洗衣机UNION SELECT 空调UNION SELECT 电脑UNION SELECT 热水器UNION…...

OpenShift 4 - 多云管理(2) - 配置多集群观察功能
《OpenShift / RHEL / DevSecOps 汇总目录》 本文在 OpenShift 4.17 RHACM 2.12 环境中进行验证。 文章目录 多集群观察技术架构安装多集群观察功能监控多集群的运行状态监控多集群的应用运行在被管集群监控应用运行在管理集群监控被管集群的应用运行 参考 多集群观察技术架构…...

【鸿睿创智开发板试用】RK3568 NPU的人工智能推理测试
目录 引言 驱动移植 例程编译 修改build.sh 执行编译 运行测试 部署libc的库文件 执行测试程序 结语 引言 鸿睿创智的H01开发板是基于RK3568芯片的,瑞芯微芯片的一大特色就是提供了NPU推理的支持。本文将对其NPU推理进行测试。 驱动移植 H01的开发板已经…...

iOS swift开发系列 -- tabbar问题总结
1.单视图如何改为tabbar,以便显示2个标签页 右上角➕,输入tabbar 找到控件,然后选中,把entrypoint移动到tabbar控件 2.改成tabbar,生成两个item,配置各自视图后,启动发现报错 Thread 1: “-[p…...

四、CSS3
一、CSS3简介 1、CSS3概述 CSS3 是 CSS2 的升级版本,他在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。 CSS在未来会按照模块化的方式去发展:https://www.w3.org/Style/CSS/current-work.html …...

Three使用WebGPU的关键TSL
Three.js 使用 WebGPU 的关键 TSL TSL: three.js shader language 介绍 three.js 材质转为webgpu的关键流程, 从而引出 TSL. 1、关键类关系 WebGPURenderer|-- library: StandardNodeLibrary|-- _nodes: Nodes|-- _objects: RenderObjects|-- createRenderObject()StandardN…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》
🧠 LangChain 中 TextSplitter 的使用详解:从基础到进阶(附代码) 一、前言 在处理大规模文本数据时,特别是在构建知识库或进行大模型训练与推理时,文本切分(Text Splitting) 是一个…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...

高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...