C05S06-Nginx的内置变量和代理

一、常见内置变量

内置变量说明
$uri请求的URL,不包括主机和参数
$request_uri请求的URL,包括主机和参数
$host请求的主机名
$http_user_agent客户端信息,浏览器和操作系统
$remote_addr客户端IP地址
$remote_port客户端端口
$server_addr服务端IP地址
$server_port服务端端口
$request_method请求方式
$scheme请求协议
$request_filename请求的资源路径
$doucument_root请求的资源根目录
X-Real-IP客户端的真实IP地址
X-Forwarded-For客户端IP地址和代理IP地址

二、代理

代理是客户端和服务端的中间人,客户端通过代理访问服务端。代理又分为正向代理和反向代理。从网络参考模型的角度来看,正向代理属于七层代理,反向代理包括四层代理和七层代理。

四层代理和七层代理的区别:

  1. 四层代理是基于TCP的代理转发,基于IP地址和端口的形式实现代理。四层代理无法获取HTTP请求中的URL信息,只能进行数据转发。四层代理是由内核进行转发,速度更快。
  2. 七层代理是基于HTTP的代理转发,可以处理HTTP的请求和响应,收到HTTP请求后,会根据代理方式将HTTP请求转发到服务端。可以对HTTP请求进行分析、处理,对请求内容做路由、流量控制、内容过滤等。七层代理是基于应用层代、用户态处理,速度较慢,但是更加安全可靠。

目前能够同时进行四层代理和七层代理的应用只有Nginx、Haproxy。

1. 正向代理

正向代理需要对请求进行处理,属于七层代理。正向代理是面向客户端的,代理客户端、隐藏客户端。客户端想要访问网页,但是无法直接访问,可以通过正向代理访问。服务端只知道代理IP地址,不知道客户端IP地址;客户端知道代理和服务端的IP地址。

1.1 固定地址正向代理

  1. 新增一个Nginx的server模块,具体配置如下。

    server {listen 8888;server_name localhost;# 设置DNS解析地址resolver 218.2.135.1 valid=300 ipv6=off;# 设置解析服务超时时间resolver_timeout 3s;# 设置代理服务器读取数据超时时间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;# 不保存响应数据的临时文件,防止文件过多proxy_max_temp_file_size 0;# 状态码是200和302的缓存有效期是1分钟proxy_cache_valid 200 302 1m;# 状态码是301的缓存有效期是1小时proxy_cache_valid 301 1h;# 其他状态码的缓存有效期是1分钟proxy_cache_valid any 1m;}
    }
    
  2. 保存文件后,检查配置语法是否存在问题,重启Nginx服务。

    nginx -t
    systemctl restart nginx
    
  3. 在主机的浏览器中输入本机IP和端口,或者使用curl命令获取网页,查看是否实现正向代理。

    curl 192.168.1.128:8888
    

1.2 变化地址正向代理

  1. 新增一个Nginx的server模块,具体配置如下。

    server {listen 8889;resolver 218.2.135.1;resolver_timeout 3s;location / {# 自动设置代理的请求地址proxy_pass $scheme://$http_host$request_uri;# 在请求头中传递客户端的host信息proxy_set_header Host $http_host;# 设置客户端请求中包含真实IP地址proxy_set_header X-Real-IP $remote_addr;# 设置客户端经过的代理地址proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 传递客户端请求的协议信息proxy_set_header X-Forwarded-Proto $scheme;# 传递客户端的主机名proxy_set_header X-Forwarded-Host $host;# 传递客户端的请求端口proxy_set_header X-Forwarded-Port $server_port;proxy_buffers 256 4k;proxy_max_temp_file_size 0;proxy_cache_valid 200 302 1m;proxy_cache_valid 301 1h;proxy_cache_valid any 1m;}
    } 
    
  2. 保存文件后,检查配置语法是否存在问题,重启Nginx服务。

    nginx -t
    systemctl restart nginx
    
  3. 使用curl命令通过传参的方式获取网页,查看是否实现正向代理。

    # curl -x 代理URL 目标URL
    curl -x 192.168.1.128:8889 www.baidu.com
    

2. 反向代理

反向代理包含四层代理和七层代理,代理服务端、隐藏服务端。客户端向代理发起请求,代理根据一定的策略(负载)将请求发送到服务端。客户端不知道请求的服务端具体IP,代理服务器隐藏了服务端具体的IP地址。

负载均衡是一种流量分发机制,根据算法将流量分发到不同的后端服务器,以实现服务端的高可用,也就是备灾。

负载均衡的常见算法:

  • 轮询:负载均衡默认算法,会将请求轮流分发给后端服务器,适用于后端服务器处理能力相近时。
  • 加权轮询:根据后端服务器的处理能力赋予不同的权重,处理能力高的服务器权重高,处理能力低的服务器权重低。流量高峰时期可以实现流量分发优化,适用于后端服务器处理能力差异大时。
  • IP Hash:请求后端服务器,会使用Hash算法计算出IP地址的Hash值,然后再把请求发送到对应的后端服务器。如果客户端IP地址一致,下一次的请求会再次发送到对应的服务端,保证会话的稳定。因此要实现会话保持可以使用ip Hash算法。
  • 最小链接数:将请求发送到当前连接较少的后端服务器,这种算法适用于后端服务器处理任务耗时不同的情况,可以有效避免请求集中在处理能力更强的后端服务器。
  • URL Hash:根据URL路径来计算Hash值,请求的URL路径相同,客户端的请求会被发送到同一台服务器上。

负载均衡的特点:

  1. 根据算法将流量分发给不同的后端服务器。
  2. 客户端访问的是代理地址,响应也是来自代理服务器。
  3. 客户端不了解后端服务器情况,不知道具体的IP地址。
  4. 提高了安全性,后端服务器是隐藏的。
  5. 负载均衡是有缓存的,可以直接访问缓存,提高响应速度。

2.1 七层反向代理

七层反向代理使用upstream语法,配置在http模块中,进行请求中的HTTP处理。

  1. 轮询基本配置。

    在http模块中定义一个upstream模块,然后在location模块调用。轮询是负载均衡的默认策略,可以不用进行设置。

    upstream backend {server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  2. 加权轮询基本配置。

    在http模块中定义一个upstream模块,然后在location模块调用。通过weight设置权重。

    upstream backend {server 192.168.1.129 weight=3;server 192.168.1.130 weight=1;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  3. IP Hash基本配置。

    在http模块中定义一个upstream模块,然后在location模块调用。使用ip_hash开启IP Hash策略。

    upstream backend {ip_hash;server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  4. 最小连接数基本配置。

    在http模块中定义一个upstream模块,然后在location模块调用。使用least_conn开启最小连接数策略,通常还会和权重weight搭配使用。

    upstream backend {least_conn;server 192.168.1.129 weight=3;server 192.168.1.130 weight=2;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    
  5. URL Hash基本配置。

    在http模块中定义一个upstream模块,然后在location模块调用。使用hash设置根据URL路径计算hash值。

    upstream backend {hash $request_uri;server 192.168.1.129;server 192.168.1.130;
    }location / {root   html;index  index.html index.htm;proxy_pass  http://backend;
    }
    

2.2 四层反向代理

四层反向代理使用stream语法,配置全局模块中。用于流量的转发,不涉及请求的处理,所以只允许轮询、加权轮询和最小连接数等策略。

在配置文件的全局模块中新增一个stream模块,其中包括upstream模块和server模块。需要注意的是端口号不能够和http模块中的server模块设置的端口号相同,否则会产生端口占用,导致Nginx服务无法正常启动。

  1. 轮询基本配置。

    stream {upstream backend {server 192.168.1.129:80;server 192.168.1.130:80;}server {listen 81;proxy_pass backend;}
    }
    
  2. 加权轮询基本配置。

    stream {upstream backend {server 192.168.1.129:80 weight=3;server 192.168.1.130:80 weight=1;}server {listen 81;proxy_pass backend;}
    }
    
  3. 最小连接数基本配置。

    stream {upstream backend {least_conn;server 192.168.1.129:80;server 192.168.1.130:80;}server {listen 81;proxy_pass backend;}
    }
    

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

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

相关文章

mysql排序问题

mysql 建数据库时,需要指定 字符集 和 排序规则 建表时,也可以指定 也可以指定具体的字段 安照下面的sql顺序执行插入,它们的排序是什么样的? INSERT into test_sort (uid,create_time) VALUE (d,now()) INSERT into test_sort (u…

JAVA 图形界面编程 AWT篇(1)

前言 为了应对JAVA课设,小编走上了java的图形界面编程的道路,通过博客分享自己的学习历程,并进行笔记的记录。 AWT(Abstract Window Toolkit)介绍 AWT(抽象窗口工具包)是 Java 最早的图形用户界…

vulhub复现CVE-2021-44228log4j漏洞

目录 一:漏洞概述 二:漏洞原理 三:漏洞利用 lookup功能: JNDI解析器: ldap服务: RMI: 四:漏洞复现 4.1靶场 4.2dnslog测试 4.3部署jndi-injection-exploit 4.4打开监听端口 4.5触发请…

ip地址获取失败啥意思?ip地址获取失败怎么回事

在日常的网络使用中,我们时常依赖于稳定的IP地址来确保数据的顺畅传输和设备的正常识别。然而,有时我们会遇到“IP地址获取失败”的困扰,这不仅阻碍了我们的网络访问,还可能带来一系列的网络连接问题。那么,IP地址获取…

如何在 Android 项目中实现跨库传值

背景介绍 在一个复杂的 Android 项目中,我们通常会有多个库(lib),而主应用程序(app)依赖所有这些库。目前遇到的问题是,在这些库中,libAd 需要获取 libVip 的 VIP 等级状态&#xf…

非常规使用client-go踩坑记

0x01 背景 编程者总有想偷懒的倾向。至少我的初衷时,尽量复用现有的代码。但有时也会变得弄巧成拙。 这不,最近需要在一个Go服务里添加一个CRD的缓存等待。熟悉k8s的同学都知道,向 kube-apiserver 提交一个更新,到同一个进程中的…

OpenGL ES详解——多个纹理实现混叠显示

目录 一、获取图片纹理数据 二、着色器编写 1. 顶点着色器 2. 片元着色器 三、绑定和绘制纹理 1. 绑定纹理 2. 绘制纹理 四、源码下载 一、获取图片纹理数据 获取图片纹理数据代码如下: //获取图片1纹理数据 mTextureId loadTexture(mContext, R.mipmap.…

java引用相关(四大引用类型,软引用避免oom,弱引用表,虚引用和引用队列,可达性分析算法)

1. 什么是引用? 问题:什么是引用?Java中的引用是如何工作的? 答案: 引用 是对象的句柄,用于访问堆内存中的对象。在Java中,引用变量实际上存储的是对象的地址,而不是对象本身。通…

十一、容器化 vs 虚拟化-Docker

文章目录 前言一、Docker 介绍1. 简介2. 应用场景3. 特点4. Docker和虚拟机之间的区别5. 解决痛点1. 解决依赖兼容2. 解决操作系统环境差异3. 小结 二、Docker 架构三、工作流程五、Docker 核心组件及其工作机制1. Docker 客户端(Docker Client)2. Docke…

linux学习笔记01 基础命令

目录 创建 touch 创建文件 (创建但是不打开) vi / vim 创建文件 (创建一个文件并打开) mkdir 创建文件夹 切换目录 cd 查看 pwd 查看当前目录完整路径 ls 查看目录信息 dir 查看目录信息 ll 表示查看目标目录下的信息 ls -a 查看当前目录下的…

【深度学习】深刻理解多模态模型CLIP

CLIP(Contrastive Language-Image Pretraining) 是由 OpenAI 提出的一个多模态模型,旨在学习视觉和语言的联合表示,能够通过图像和文本之间的对比学习来实现图像和文本之间的紧密联系。CLIP 模型可以通过自然语言描述理解和处理图…

android 聊天界面键盘、表情切换丝滑

1、我们在聊天页面时候,往往会遇到,键盘、表情、其他选择切换时候页面会出现掉下来再弹起问题,这是因为,我们切换时候,键盘异步导致内容View高度变化,页面掉下来后,又被其他内容顶起这种很差视觉…

Nginx 缓存系统 proxy_cache详解

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行;当前是秒级时间戳,如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…

网络药理学:(待更)Alphafold3和批量分子动力学模拟(Desmond、AutoMD)

批量动力学模拟 注意全都需要在类linux平台上进行 安装Desmond模块: https://github.com/Wang-Lin-boop/Schrodinger-Script 安装AutoMD模块: Wang-Lin-boop/CADD-Scripts: Scripts for virtual screening, cross docking and protein relax using Sc…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太…

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③

第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题③ 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…

鲲鹏麒麟安装Kafka-v1.1.1

因项目需要在鲲鹏麒麟服务器上安装Kafka v1.1.1,因此这里将安装配置过程记录下来。 环境说明 # 查看系统相关详细信息 [roottest kafka_2.12-1.1.1]# uname -a Linux test.novalocal 4.19.148 #1 SMP Mon Oct 5 22:04:46 EDT 2020 aarch64 aarch64 aarch64 GNU/Li…

群控系统服务端开发模式-应用开发-登录退出发送邮件

一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下&#xff0c;修改Login.php&#xff0c;代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…