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…...

ESP32-S3模组上跑通ES8388(30)
接前一篇文章:ESP32-S3模组上跑通ES8388(29) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回终于解析完了es8388_init函数的所有代码。本回回到调用它的地方,继续往下讲解。 我们是从ESP32-S3模组上跑通ES8388(7)-CSDN博客开始进入es8388_init函数,展开对于它的解析的…...

概率论得学习和整理24:EXCEL的各种图形,统计图形
目录 0 EXCEL的各种图形,统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图,一般是只选中1列数据(1个数组) 1.3 如何修改频度图的宽度 1.4 hist图的一个特…...

WPF中依赖属性的底层和普通属性的底层有什么不一样
WPF中依赖属性的底层 在 WPF 中,依赖属性(Dependency Property)是 WPF 属性系统的核心,它支持功能强大的特性(如数据绑定、动画、样式等)。其底层实现是围绕 DependencyObject 类展开的。以下是 WPF 中依赖…...

【Qt】drawText字体大小问题探究
背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…...

Mapbox-GL 的源码解读的一般步骤
Mapbox-GL 是一个非常优秀的二三维地理引擎,随着智能驾驶时代的到来,应用也会越来越广泛,关于mapbox-gl和其他地理引擎的详细对比(比如CesiumJS),后续有时间会加更。地理首先理解 Mapbox-GL 的源码是一项复…...

【C++】高级分析 switch 语句的应用
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯switch 语句的基本用法语法结构核心要点实例演示正确实现 期望输出错误实现错误输出 💯if 与 switch 语句的实现比较使用 if 语句使用 switch 语句比较分析 &am…...

活动预告 | Surface 来了#11:Windows 11 AI+ PC,释放 AI 办公设备的无限潜能
课程介绍 欢迎来到 Surface 来了第 11 期节目。 今年 5 月底,微软推出了专为 AI 体验而设计的全新 Windows PC 品类:Windows 11 AI PC。 微软通过 Windows 11 AI PC,进一步强调了 NPU 在运行设备端 AI 功能的重要性。并要求符合这一品类的…...

php基础:正则表达式
1.正则表达式 正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。到目前为止,我们前面所用过的精确(文本)匹配也是一种正则表达式。 在PHP中,正则表达式一般是由正规字…...

go语言压缩[]byte数据为zlib格式的时候,耗时较多,应该怎么修改?
在Go语言中使用compress/flate包来实现Zlib格式的压缩时,如果发现压缩耗时较多,可以考虑以下几个优化方向: ### 1. 压缩级别 默认情况下,compress/flate包中的NewWriter函数使用的是默认压缩级别(BestSpeed和BestComp…...

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)
AdaBoost AdaBoost(Adaptive Boosting)是一种Boosting算法,它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重,使那些被错误分类的样本在后续的训练中得到…...