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

【Nginx系列】Nginx中rewrite模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
      • 1. 隐藏真实目录结构
      • 2. 规范化 URL
      • 3. 防止盗链
      • 4. HTTP 到 HTTPS 的强制重定向
      • 5. 条件性重写
      • 6. 统一资源标识符(URI)规范化
      • 7. 避免敏感信息泄露
      • 8.工作原理
      • 9.Rewrite Flag 参数
    • 二.代码实战

一.基本介绍

Nginx 的 rewrite 模块是ngx_http_rewrite_module,它主要用于改写请求 URI,是 Nginx 默认安装的模块之一。通过使用 rewrite,可以实现 URL 重写和重定向,这在网站开发和维护中有着广泛的应用。
在这里插入图片描述

1. 隐藏真实目录结构

使用 rewrite 可以隐藏服务器上的真实文件路径和目录结构,增加安全性,防止攻击者通过直接访问文件路径获取敏感信息。例如,可以通过以下配置实现:

rewrite ^/api/(.*)$ /backend/$1 break;

这样,所有的/api/请求都会被重写到/backend/目录下,而外界无法直接通过 URL 猜测真实的文件路径。

2. 规范化 URL

强制规范化 URL 格式可以避免一些常见的安全问题,如路径遍历攻击或路径参数欺骗。例如,确保 URL 以特定的格式展示:

rewrite ^/(.*)/$ //$1.html last;

这个规则将所有以斜杠结尾的请求重写为对应的.html文件。

3. 防止盗链

通过 rewrite 实施防盗链策略,防止其他网站直接链接到本站的资源,减轻服务器负载,提高资源的安全性。例如:

rewrite ^/images/(.*)$ /notfound.gif if-not-referer($http_referer, "http://www.yoursite.com");

这个规则会检查 Referer 头,如果不是来自指定的站点,则重写到一个占位符图片。

4. HTTP 到 HTTPS 的强制重定向

通过 rewrite 将 HTTP 请求强制重定向到 HTTPS,确保数据在传输过程中的安全性。例如:

server {listen 80;server_name example.com;rewrite ^ https://$server_name$request_uri? permanent;
}

这个配置会将所有的 HTTP 请求重定向到 HTTPS。

5. 条件性重写

可以根据请求中的条件来选择是否进行重写,例如,只有特定 IP 范围的请求才允许进行某种操作。例如:

map $remote_addr $allowed {default      0;192.168.1.1  1;
}
location /admin {rewrite ^/admin(.*)$ /access_denied last;if ($allowed = 0) {return 403;}
}

这个配置会阻止未授权的 IP 访问/admin目录。

6. 统一资源标识符(URI)规范化

通过强制规范化 URI,可以防止攻击者尝试混淆或绕过安全策略。例如:

rewrite ^([^.]*[^/])$ /$1.html last;

这个规则会将没有扩展名的请求重写为.html文件。

7. 避免敏感信息泄露

通过 rewrite 可以限制对某些敏感信息或文件的访问,确保只有授权用户能够获取特定内容。例如:

location ~* ^/sensitive/.*\.php$ {deny all;
}

这个配置会阻止所有用户访问/sensitive/目录下的 PHP 文件。

8.工作原理

Rewrite 模块的指令包括break, if, return, rewrite, set等。Rewrite 指令会根据 PCRE 正则匹配重写 URI,然后发起内部跳转再匹配 location,或者直接做 30x 重定向返回客户端。如果新 URI 包含协议信息,如http://https://,则会直接返回客户端重定向。

9.Rewrite Flag 参数

  • last:停止处理任何 rewrite 相关的指令,立即用替换后的新 URI 开始下一轮的 location 匹配。
  • break:停止处理任何 rewrite 的相关指令,直接用新的 URI 进一步处理请求。
  • redirect:返回 302 临时重定向。
  • permanent:返回 301 永久重定向。
    在这里插入图片描述

二.代码实战

location /test/server {rewrite ^/test(.*)$ $1 break;proxy_pass       http://xxxx.xxx.xx.xx:8320$1;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_redirect off;client_max_body_size 600M;client_body_buffer_size 600M;uwsgi_send_timeout 1800;uwsgi_connect_timeout 1800;uwsgi_read_timeout 1800;proxy_read_timeout 1800;proxy_connect_timeout 1800;proxy_send_timeout 1800;
}

在 Nginx 的配置文件中,$1 是一个变量,它代表正则表达式捕获的分组。在你提供的配置片段中:

这里的正则表达式 ^/test(.*)$ 用于匹配 URL 中以 /test 开头的部分,并且将 /test 后面的所有内容捕获为一个分组,这个分组就是 $1

- rewrite ^/test(.*)$ $1 break; 这行代码的作用是将匹配到的 URL 重写为它自己,实际上这个 rewrite 规则并没有改变 URL,break 表示重写完成后不再进行后续的重写检查。

- proxy_pass http://xxxx:8320$1; 这行代码的作用是将请求代理到 http://xxxx:8320 这个后端服务器,并且将原始请求中的 /test 及其后面的部分(即 $1)附加到代理服务器的 URL 后面。

举个例子,如果有一个请求的 URL 是 http://yourserver.com/test/some/path,那么经过上述配置后,Nginx 会将请求转发到 http://xxxxxxx:8320/some/path。这里的 /some/path 就是 $1 代表的内容。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

【Nginx系列】Nginx中rewrite模块

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释

codesys进行控制虚拟轴运动时出现的一些奇怪bug的解释 问题描述第一个奇怪的bug:新建的工程没有SoftMotion General Axis Pool选项第二个奇怪的bug:在新建工程SoftMotion General Axis Pool选项时,无法手动添加第三个奇怪的bug:虚…...

前端框架有哪些

1. 简介 1.1. 概述 前端框架是指用于帮助开发者更高效地构建、维护和测试Web应用的工具集。这些框架通常提供了一系列的组件、库和工具,使得开发人员可以快速地搭建起一个具有统一设计和功能的应用界面。 2. 前端框架 2.1. React.js 由Facebook维护的一个开源JS库,用于构…...

illusionX——一个从理解情感到改变学习、创新教育体验集成情感计算的混合现实系统

概述 论文地址:https://arxiv.org/pdf/2402.07924.pdf 近年来,情感计算在丰富人类与计算机和机器的交互方式方面备受关注。这一创新领域旨在通过理解和响应用户的情绪和心理状态,将人机交互转变得更加自然和直观。无论是情感识别、面部表情分…...

《黑暗之魂2:原罪学者》是什么类型的游戏 《黑暗之魂》可以在苹果Mac电脑上玩吗?

在宏大的世界观游戏中,《黑暗之魂2:原罪学者》脱颖而出,以其探索性和挑战性征服了全球玩家的心灵。下面我们来看看《黑暗之魂2:原罪学者》是什么类型的游戏,《黑暗之魂2:原罪学者》可以在苹果电脑玩吗的相关内容。 一、《黑暗之魂2:原罪学者》…...

使用C++20协程实现异步I/O操作:实战指南

使用C20协程实现异步I/O操作:实战指南 随着C20的发布,协程(coroutines)作为一种新的语言特性被引入,为异步编程提供了强大的支持。协程使得编写异步代码变得更加简洁和直观,避免了传统回调和状态机的复杂性…...

MySQL之UDF提权复现

什么是UDF: UDF(Userfined function)用户自定义函数,是MySQL的一个扩展接口,用户通过自定义函数可以实现在 MySQL 中无法方便实现的功能,其添加的新函数都可以在 SQL 语句中调用。 提权条件: 知道MySQL用户名和密码…...

html记账本改写:保存数据 localStorage。

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>记账本改写</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid…...

frida检测绕过-libmsaoaidsec.so

libmsaoaidsec.so 部分检测手段 检测机制在native层实现一般在init_proc()函数中触发使用 pthread_create 创建2个检测线程 绕过: nop pthread_create 的调用 eg: 在 bilibil1 - v7.26.1版本中, 在got表导入了pthread_create 绕过: 替换dlsym(xx, "pthread_create "…...

Splasthop 安全远程访问帮助企业对抗 Cobalt Strike 载荷网络攻击

一、背景 根据 FreeBuf&#xff08;标题为&#xff1a;潜藏系统2个月未被发现&#xff0c;新型网络攻击瞄准中国高价值目标&#xff09;和 The Hacker News&#xff08;标题为&#xff1a;New Cyberattack Targets Chinese-Speaking Businesses with Cobalt Strike Payloads&a…...

Rust:Restful API 服务程序开发详述

0. 关于异步程序设计 0.1 对异步机制的理解 运行效率对于后端程序来讲很重要。我曾经以为&#xff0c;多线程机制是后端设计的终极方法&#xff0c;后来才发现&#xff0c;异步机制才是榨干 CPU 运行效率资源的关键所在。 我最初对于异步程序设计有误解&#xff0c;以为多线…...

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF

本章的目的是帮助网络工程师确定网络的理想 OSPF 配置。本章将回答以下问题 应何时在数据中使用OSPF ?配置 OSPF 的关键设计原则是什么?OSPFv2 和 OSPFv3 之间有什么区别&#xff0c;应如何使用?如何在路由协议栈中配置 OSPF ?如何在服务器上配置 OSPF&#xff0c;例如为容…...

【Visual Studio 报错】未加载 wntdll.pdb(一种可行的解决办法)

调试程序时&#xff0c;会出现下面这个报错 分析原因&#xff1a; 出现未加载 wntdll.pdb 报错大概率是你的指针使用错误 &#xff0c;比如使用野指针、越界访问、或者堆区空间释放方式错误等。 这里以 堆区空间释放方式错误 为例子 1、堆区开辟的数组空间使用 delete 释放 …...

P1332 血色先锋队

[题目通道](血色先锋队 - 洛谷) #include<bits/stdc.h> using namespace std; int n,m,a,b,xa[114514],ya[114514],xb[114514],yb[114514],maxx[114514]; int main() {cin>>n>>m>>a>>b;for(int i1;i<a;i)cin>>xa[i]>>ya[i];for(…...

HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题

本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候&#xff0c;发现很多博客在onTimer(event: (utc: number, elapsedTime: number) > void) 这里提到elapsedTime&#xff1a;计时器经过的时间&#xff0c;单位为毫秒。我不清楚是否为版本问题。 在我查看ver…...

函数指针学习

认识函数指针&#xff1a; 函数指针的用处&#xff1a; 回调函数&#xff08;以函数指针为参数的参数&#xff09; 定义带标签的结构体 typedef struct mode { int data; } Node; 标签&#xff08;mode&#xff09;: mode 是结构体的标签名。在这种定义中&#xff0c;mo…...

『功能项目』武器的切换实例【34】

本章项目成果展示 我们打开上一篇33战士的A键连击的项目&#xff0c; 本章要做的事情是按键盘E键切换职业时切换手中的武器 首先在资源商店下载免费的武器模型 创建一个空物体 命名为WeaponPos 将武器预制体拖拽至WeaponPos &#xff08;注意调整空物体位置就可以后续文章会更…...

github中action作用和讲解

1&#xff0c;简介 GitHub Actions 是 GitHub 的一个自动化功能&#xff0c;它允许你在 GitHub 仓库中自动执行软件开发工作流程。你可以使用 GitHub Actions 来执行各种任务&#xff0c;比如&#xff1a; 自动测试&#xff1a;每当代码被推送到仓库时&#xff0c;自动运行测试…...

数据库管理-第238期 23ai:全球分布式数据库-架构与组件(20240904)

数据库管理238期 2024-09-04 数据库管理-第238期 23ai&#xff1a;全球分布式数据库-架构与组件&#xff08;20240904&#xff09;1 架构图2 分片数据库与分片3 Shard Catalog4 Shard Director5 Global Service6 管理界面总结 数据库管理-第238期 23ai&#xff1a;全球分布式数…...

GIT | git提交注释自动添加信息头

GIT | git提交注释自动添加信息头 时间&#xff1a;2024年9月6日10:20:11 文章目录 GIT | git提交注释自动添加信息头1.操作2.commit-msg文件 1.操作 2.commit-msg文件 #!/bin/sh # # An example hook script to check the commit log message. # Called by "git commit&q…...

特征提取网络对比:ResNet与原始模型在deep_sort_pytorch中的性能差异

特征提取网络对比&#xff1a;ResNet与原始模型在deep_sort_pytorch中的性能差异 【免费下载链接】deep_sort_pytorch MOT using deepsort and yolov3 with pytorch 项目地址: https://gitcode.com/gh_mirrors/de/deep_sort_pytorch 在目标跟踪领域&#xff0c;特征提取…...

低成本自动化方案:OpenClaw+自部署千问3.5-27B替代ChatGPT API调用

低成本自动化方案&#xff1a;OpenClaw自部署千问3.5-27B替代ChatGPT API调用 1. 为什么选择本地模型OpenClaw组合 去年我用ChatGPT API开发自动化脚本时&#xff0c;发现一个致命问题&#xff1a;当任务需要连续调用多个API时&#xff08;比如先搜索资料再整理成报告&#x…...

QQ聊天数据管理实践指南:全平台数据访问与安全操作手册

QQ聊天数据管理实践指南&#xff1a;全平台数据访问与安全操作手册 【免费下载链接】qq-win-db-key 全平台 QQ 聊天数据库解密 项目地址: https://gitcode.com/gh_mirrors/qq/qq-win-db-key 问题定位&#xff1a;聊天数据管理的核心挑战 在数字化生活中&#xff0c;即时…...

滑动窗口-438. 找到字符串中所有字母异位词

文章目录1.题解核心解题思路&#xff08;滑动窗口&#xff09;2.机考代码3.知识点讲解1. map.getOrDefault(key, defaultValue)2. map.put(key, value)3. map.containsKey(key)4. s.toCharArray()5. s.charAt(index)6. Scanner 相关&#xff08;机考必备&#xff09;力扣地址&a…...

CameraLink三种模式(Base/Medium/Full)信号传输差异对比与选型建议

CameraLink三种工作模式深度解析与工业选型实战指南 在工业视觉检测线上&#xff0c;一台高速运行的贴片机正以每分钟800次的速度捕捉元件位置。当工程师将相机从200万像素升级到800万像素时&#xff0c;原本稳定的图像突然出现随机噪点——这往往是CameraLink模式选择不当导致…...

Jetson平台高温警告静默指南:深入解析notify_disable与nvpmodel_indicator.py

1. 为什么需要关闭Jetson的高温警告 当你把Jetson设备用在嵌入式系统或者工业自动化场景时&#xff0c;那个频繁弹出的"Caution - Hot surface. Do not touch"警告可能会让人抓狂。我去年在一个智能监控项目上就遇到过这种情况——设备在户外机箱里持续运行&#xff…...

【BUUCTF】MISC 弱口令实战:从安装Python库到LSB隐写破解全流程

1. 弱口令与LSB隐写技术入门 第一次接触CTF比赛时&#xff0c;我被各种隐写术搞得晕头转向。特别是遇到需要破解弱口令和LSB隐写的题目时&#xff0c;简直就像在黑暗中摸索。后来经过多次实战&#xff0c;终于总结出一套行之有效的方法。今天我就来分享从安装Python库到最终破解…...

树莓派3B+安装OpenMediaVault(OMV)后WiFi配置失效的快速修复指南

1. 问题现象与原因分析 最近在树莓派3B上折腾OpenMediaVault&#xff08;OMV&#xff09;时遇到了一个典型问题&#xff1a;安装完OMV后&#xff0c;原本配置好的WiFi突然无法连接了。这个现象特别常见于使用Raspberry Pi OS Lite系统的用户&#xff0c;我自己用的就是Bookworm…...

AI黑科技展示:CYBER-VISION零号协议实时视频分割效果

AI黑科技展示&#xff1a;CYBER-VISION零号协议实时视频分割效果 1. 未来已来&#xff1a;当AI视觉遇见赛博朋克 想象一下这样的场景&#xff1a;一位视障人士戴上智能眼镜&#xff0c;眼前的世界突然变得清晰可辨——人行道上的盲道被高亮标注&#xff0c;前方的障碍物用醒目…...

如何通过LeaguePrank实现游戏界面个性化:打造独特的英雄联盟视觉体验

如何通过LeaguePrank实现游戏界面个性化&#xff1a;打造独特的英雄联盟视觉体验 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款专注于英雄联盟客户端界面自定义的开源工具&#xff0c;它通过安全的官方LCU…...