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…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
