当前位置: 首页 > news >正文

06. Nginx进阶-Nginx代理服务

proxy代理功能

正向代理

什么是正向代理?

正向代理(forward proxy),一个位于客户端和原始服务器之间的服务器。

工作原理

  1. 为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标(即原始服务器);
  2. 然后代理服务器向原始服务器转发请求并获取内容返回给客户端,此时客户端才能使用正向代理。

示意图

备注

在系统运维工作中很难使用到nginx的正向代理,此处忽略正向代理的学习。

反向代理

什么是反向代理?

反向代理(reverse proxy),一个位于服务端的服务器。

工作原理

  1. 代理服务端接收来自网络上的连接请求;
  2. 然后将请求转发给内部网络的服务端;
  3. 并从服务端获取结果返回给请求的客户端;

示意图

正向代理和反向代理的区别

  1. 位置不同,正向代理架设在客户端和服务端直接,而反向代理架设在服务端。
  2. 代理对象不同,正向代理是代理的客户端,服务器不知道实际发起请求的客户端是谁;而反向代理是代理的服务端,客户端不知道实际提供服务的服务端是谁。

Nginx反向代理应用

模块名称

ngx_http_proxy_module

常见语法

  1. 代理设置
    1. proxy_pass URL:代理后端服务器URL
    2. 适用范围:location
  2. 缓冲区设置
    1. proxy_buffering on | off:缓冲区的开启与关闭
    2. 适用范围:http、server、location
  3. 缓冲区大小设置
    1. proxy_buffer_size size:设置缓冲区的大小
    2. 适用范围:http、server、location
  4. 缓冲区数量设置
    1. proxy_buffers number size:缓冲区数量大小
    2. 适用范围:http、server、location
  5. 忙碌的缓冲区大小设置
    1. proxy_busy_buffers_size size:设置忙碌的缓冲区大小
    2. 适用范围:http、server、location
  6. 头信息设置
    1. proxy_set_header field value:设置真实客户端地址
    2. 适用范围:http、server、location
  7. 连接超时时间设置
    1. proxy_connect_timeout time:连接超时设置
    2. 适用范围:http、server、location
  8. 读取超时时间设置
    1. proxy_read_timeout:读取超时设置
    2. 适用范围:http、server、location
  9. 发送超时时间设置
    1. proxy_send_timeout timeout:发送超时设置
    2. 适用范围:http、server、location

应用反向代理

注意:使用的yum的Nginx服务方式实验。

  1. 配置网站Nginx服务(服务端)

路径:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129

server {auth_basic "账号密码登录";auth_basic_user_file /etc/nginx/conf.d/.passwd;listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}

测试数据

mkdir -p /www/wangmingqu/
echo "后端提供服务主机" >> /www/wangmingqu/index.html
echo "服务器主机的地址" >> /www/wangmingqu/index.html
  1. 配置代理服务(即proxy端)

路径:/etc/nginx/conf.d/nginx_proxy.conf
地址:192.168.131.130

server {listen       80;server_name  localhost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}
  1. 访问测试
nginx -t
systemctl reload nginx

image.png

  1. 观察日志

可以看到最后一个参数显示了客户端的真实IP

192.168.131.130 - wangmingqu [18/Jan/2024:22:00:26 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "192.168.131.1"
  1. 代理配置详解

代理设置:
proxy_pass http://wang.wangmingqu.com:80;
#代理后端web服务器配置;
#语法格式:proxy_pass URL;
#指定要代理的服务端的协议、地址、端口和URL;
#URL设置方式:http://localhost:80/url/、http://127.0.0.1:80/url/
#可配置区域:location

proxy_redirect default;
#修改web服务器返回的响应头中的location头域跟refresh头域数值;
#语法格式:proxy_redirect [default|off;redirect replacement]
#默认配置:proxy_redirect default;即在转发时使用默认端口
#可配置区域:http、server、location

客户端地址设置:
proxy_set_header Host $http_host;
#语法格式:proxy_set_header field value;
#默认设置:proxy_set_header Host $http_host;
#可配置区域:http、server、location
#转发时是否设置http头部
#如果web服务器设置了多个虚拟主机,那么必须配置这一项,如果不配置那么只显示最靠前的站点,按照字母a到z排序。

proxy_set_header X-Real-IP $remote_addr;
#转发时是否添加真实主机的IP

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#客户端通过代理访问后端服务,后端服务通过该变量获取客户端的真实IP

超时设置:
proxy_connect_timeout 60;
#语法格式:proxy_connect_timeout 超时时间;
#可配置区域:http、server、location
#Nginx代理与后端服务器连接超时时间
#连接超时设置。

proxy_send_timeout 60;
#语法格式:proxy_send_timeout 超时时间;
#可配置区域:http、server、location
#Nginx代理等待后端服务器的响应时间
#发送超时设置。

proxy_read_timeout 60;
#语法格式:proxy_read_timeout 超时时间;
#可配置区域:http、server、location
#后端服务器数据回传给Nginx代理的超时时间
#读取超时设置。

缓存设置:
proxy_buffering on;
#启用缓冲区设置
#可配置区域:http、server、location

proxy_buffer_size 32k;
#设置Nginx代理保存用户头信息的缓冲区大小
#可配置区域:http、server、location

proxy_buffers 4 128k;
#设置缓冲区文件个数及大小
#可配置区域:http、server、location

proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;

proxy缓存功能

简介

什么是代理缓存?

在代理服务器上开启的缓存,主要用于减少后端服务器的压力。

模块名称

代理缓存应用

后端服务器

路径:/etc/nginx/conf.d/wangmingqu.conf
地址:192.168.131.129

server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}}

代理服务器

  1. 子配置文件

路径:/etc/nginx/conf.d/default.conf
地址:192.168.131.130

#创建缓存存放目录
mkdir -p /www/nginx_proxy_cache/wangmingqu/
proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ levels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;server {listen 80;server_name locathost;location / {proxy_pass http://wang.wangmingqu.com:80;proxy_redirect default;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_connect_timeout 60;proxy_send_timeout 60;proxy_read_timeout 60;proxy_buffering on;proxy_buffer_size 32k;proxy_buffers 4 128k;proxy_busy_buffers_size 256k;proxy_max_temp_file_size 256k;proxy_cache proxy_wang_cache;proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;proxy_cache_key $host$uri$is_args$args;add_header Nginx-Cache "$upstream_cache_status";proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;}
}
  1. 配置文件解释

proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ lavels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;

  • proxy_cache_path:声明代理缓存路径信息
  • /www/nginx_proxy_cache/wangmingqu/:缓存数据存放路径
  • lavels=1:2:缓存时使用几级目录存储,此处为二级目录存储
  • keys_zone=proxy_wang_cache:10m:定义一个名字叫proxy_wang_cache的缓存规则,此缓存区规则的大小为10m
  • max_size=10g:定义最大的缓存空间大小为10G
  • inactive=60m:不活跃的缓存60分钟后会被清除
  • use_temp_path=off:关闭用户临时路径的使用

proxy_cache proxy_wang_cache;

  • 引用定义的缓存配置

proxy_cache_valid 200 304 12h;

  • 定义状态码为200、304的数据缓存12个小时

proxy_cache_valid any 10m;

  • 定义其他状态的数据缓存10分钟

proxy_cache_key h o s t host hosturi i s a r g s is_args isargsargs;

  • 在存储用户信息

add_header Nginx-Cache “$upstream_cache_status”;

  • 缓存状态返回给客户端

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

  • 当出现500、502、503、504的错误码时,代理服务会跳过此后端服务器,并将请求发送到其他后端服务器
  1. 验证缓存服务
nginx -t
systemctl reload nginx

访问结果
image.png
缓存目录
image.png

相关文章:

06. Nginx进阶-Nginx代理服务

proxy代理功能 正向代理 什么是正向代理? 正向代理(forward proxy),一个位于客户端和原始服务器之间的服务器。 工作原理 为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标(即原始服务器…...

STM32 (1)

1.基本信息 stm32是由ST公司生产的一种32位微控制器(单片机)。 1.1 各种型号 stm32是32位单片机的总称,有多种不同的系列。 32即用32个比特位表示一个地址,寻址范围:0x00000000 --0xffffffff (4GB) 1.2 存储密度 …...

Spring初始(相关基础知识和概述)

Spring初始(相关基础知识和概述) 一、Spring相关基础知识(引入Spring)1.开闭原则OCP2.依赖倒置原则DIP3.控制反转IoC 二、Spring概述1.Spring 8大模块2.Spring特点2.Spring的常用jar文件 一、Spring相关基础知识(引入S…...

【Swift 周报 第四十七期

文章目录 前言新闻和社区苹果财报来袭:营收有望再创新高 巴克莱或将惨遭打脸?Apple 为在全球范围内提供迷你 App 和游戏访问的流媒体游戏服务和 App 发布新选项Swift Student Challenge 将于 2 月 5 日开放申请 提案通过的提案正在审查的提案 Swift论坛推…...

STM32(16)使用串口向电脑发送数据

发送字节 发送数组 发送字符和字符串 字符: 字符串: 字符串在电脑中以字符数组的形式存储...

利用大模型技术进行测试用例推荐如何实现

利用大模型技术进行测试用例推荐,可以通过以下步骤实现: 确定目标和需求:明确测试用例推荐的目标和需求,例如推荐哪些类型的测试用例、推荐的数量、推荐的准确率等。 收集数据:收集历史测试用例、需求文档、设计文档等…...

Linux学习:初识Linux

目录 1. 引子:1.1 简述:操作系统1.2 学习工具 2. Linux操作系统中的一些基础概念与指令2.1 简单指令2.2 ls指令与文件2.3 cd指令与目录2.4 文件目录的新建与删除指令2.5 补充指令1:2.6 文件编辑与拷贝剪切2.7 文件的查看2.8 时间相关指令2.9 …...

Python CGI编程错误汇总

文章目录 1 前言2 测试文件3 问题总结 1 前言 在学习Python CGI编程时,运行起来总是有各种各样的问题,故将问题进行总结,以便新接触Python的童鞋能少走弯路 以下均为本人遇到对应报错的解决方案,可能存在其他问题但报错相同的情况…...

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 统计子矩阵

#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<queue>using namespace std;int cnt,temp; int n,m,K; int a[505][505]; int pre[505][505];//二维前缀和void sol() {cin>>…...

计算机网络实验 基于ENSP的协议分析

实验二 基于eNSP的协议分析 一、实验目的&#xff1a; 1&#xff09;熟悉VRP的基本操作命令 2&#xff09;掌握ARP协议的基本工作原理 3&#xff09;掌握IP协议的基本工作原理 4&#xff09;掌握ICMP协议的基本工作原理 二、实验内容&#xff1a; 1、场景1&#xff1a;两台PC机…...

Java实现手机库存管理

一、实验任务 编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示和删除商品功能。每个功能的具体要求如下&#xff1a; 1.系统的首页&#xff1a;用于显示系统所有的操作&#xff0c;并且可以选择使用某一个功能。 2.商品入库功能&…...

单片机入门:LED数码管

LED数码管 LED数码管&#xff1a;由多个发光二极管封装在一起组成的“8”字型的器件。如下图所示&#xff1a; 数码管引脚定义 一位数码管 内部由八个LED组成。器件有十个引脚。 对于数码管内的8个LED有共阴和共阳两种连接方法。 共阴&#xff1a;将8个LED的阴极都连接到一…...

软考信息系统项目管理师零基础怎么学习?

软考考信息系统项目管理师&#xff0c;零基础怎么入手高项&#xff1f; 要我说对于没有基础的人群来说零基础考信息系统项目管理师还是有一定的难度的&#xff0c;难就难在需要时间去了解基础&#xff0c;而相对于系统分析师、系统构架设计师、网络规划设计师、系统规划与管理…...

【轮式平衡机器人】——TMS320F28069片内外设之Timer_IT(补:CCS程序烧录方法)

引入 Timer_IT 指的是 TMS320F28069 的定时器中断功能。在微控制器或数字信号控制器中&#xff0c;定时器是一个非常重要的外设&#xff0c;它可以用来产生固定时间间隔的中断&#xff0c;或者用来精确计算时间。 Timer_IT 的主要特点如下&#xff1a; 定时功能&#xff1a;…...

安装Proxmox VE虚拟机平台

PVE是专业的虚拟机平台&#xff0c;可以利用它安装操作系统&#xff0c;如&#xff1a;Win、Linux、Mac、群晖等。 1. 下载镜像 访问PVE官网&#xff0c;下载最新的PVE镜像。 https://www.proxmox.com/en/downloads 2. 下载balenaEtcher balenaEtcher用于将镜像文件&#…...

后端项目访问不了

问题&#xff1a; 后端启动不了&#xff0c;无法访问网站 原因&#xff1a; 1.防火墙没有关 2.有缓存 3、项目没有启动 4、docker没有启动 解决&#xff1a; 先查看进程&#xff1a;docker ps&#xff0c;必须有三个 详细查看&#xff1a;docker ps -a exited代表没有开启…...

Qt 运行一个实例进程

QLocalSocket QLocalServer 逻辑&#xff1a;首先一个新的实例启动时&#xff0c;将尝试连接到同一个本地服务器&#xff0c;如果连接失败&#xff0c;则表示第一个实例进程&#xff0c;创建一个本地服务器&#xff1b;否则&#xff0c;拉起已打开的实例进程。 main.cpp #i…...

Installing Git (安装 Git)

Installing Git [安装 Git] 1. Installing Git1.1. Description1.2. Installing on Linux (在 Linux 上安装)1.3. Installing on macOS (在 macOS 上安装)1.4. Installing on Windows (在 Windows 上安装)1.5. Installing from Source (从源代码安装) 2. sudo apt-get install …...

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西&#xff0c;这也是没法避免的&#xff0c;程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的&#xff0c;不一定适合新设备&#xff0c;需要推倒重新弄 1、解决方案通过意图选择器做…...

06 - ip route和route -n的区别

1 ip route和route -n的区别 ip route 和 route -n 都是用于查看和管理Linux系统路由表的命令。但下面是它们的区别&#xff1a; ip route&#xff1a;是Linux系统中的现代工具&#xff0c;它属于iproute2套件&#xff1b;它提供了更多的选项&#xff0c;可以更精确地控制路由表…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...