Nginx核心功能02

目录

一,正向代理

1,编译安装Nginx

(1)安装支持软件

(2)创建运行用户,组和日志目录

(3)编译安装Nginx

(4)添加Nginx系统服务

2,配置正向代理

(1)编辑主配置文件添加正向代理相关配置

(2)验证正向代理

二,反向代理

1,配置nginx七层代理

(1)环境安装

(2)配置nginx七层代理转发

(3)验证转发效果

2,配置nginx四层代理

(1)配置四层代理

(2)验证四层代理

三,Nginx缓存

1,缓存功能的核心原理和缓存类型

2,代理缓存功能设置

(1)反向代理配置

(2)设置缓存功能

四,Nginx rewrite和正则

1,Nginx正则

2,nginx location

(1)location 的语法

3,Rewrite

(1)Rewrite 语法


一,正向代理

正向代理(Forward Proxy)是一种位于客户端和原始服务器之间的代理服务器,其主要作用是将客户端的请求转发给目标服务器,并将响应返回给客户端Nginx的正向代理充当客户端的“中间人”,代表用户访问外部资源并隐藏真实IP它是企业内网管控、安全审计与加速访问的核心工具。用于场景一般是:

内网访问控制:限制员工访问特定网站(如社交媒体)
匿名访问:通过代理服务器隐藏用户真实身份。
资源缓存加速:缓存公共资源(如软件包、镜像文件),减少外网带宽消耗。

1,编译安装Nginx

Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保ginx的安装顺利完成。

(1)安装支持软件

(2)编译安装Nginx

配置Nginx的编译选项时,将安装目录设为/usr/local/nginx,运行用户和组均设为nginx;启用http_stub_status_module模块以支持状态统计,便于查看服务器的连接信息。具体项根据实际需要来定,配置前可参考“./configure--help”给出的说明。

--user=nginx#指定nginx运行用户
--group=nginx#指定nginx运行组
--with-http ssl module#支持https://
--with-http_v2_module#支持http版本2
--with-http realip module#支持ip透传
--with-http_stub_status_module#支持状态页面
--with-http_gzip_static module#支持压缩
--with pcre#支持正则
--with-stream#支持tcp反向代理
--with-stream ssl module#支持tcp的ssl加密
--with-stream realip module#支持tcp的透传ip
--add-module=./ngxhttp proxy connect module#支持https转发(默认nginx不支持https转发,需要添加第三方模块)

为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行“nginx”命令就可以调用Nginx的主程序。

(3)添加Nginx系统服务

2,配置正向代理

(1)编辑主配置文件添加正向代理相关配置

(2)验证正向代理

二,反向代理

Nginx的七层(应用层)反向代理基于HTTP/HTTPS协议,深度解析应用层内容(如URL、Header、Cookie),将客户端请求精准转发至后端服务器。作为企业级架构的“智能调度器”,它实现了负载均衡、安全隔离与性能优化的核心能力。应用场景一般是:

负载均衡:将流量分发至多台后端服务器,避免单点故障。

动静分离:

静态资源(图片、CSS/JS)由Nginx直接响应,动态请求(PHP、API)转发至Apache/Tomcat.
SSL终端:统一处理HTTPS加密/解密,降低后端服务器计算压力。
灰度发布:根据请求特征(如IP、Header)将部分流量导向新版本服务。

Nginx的四层(网络层)反向代理基于TCP/UDP协议,直接转发原始数据流,不解析应用层内容。它专为高性能、低延迟的传输层场景设计,是数据库、游戏服务器等非HTTP服务的理想选择。应用场景一般是:

数据库代理:对外暴露统一端口,内部转发至MySQL、Redis集群。
 
游戏服务器:代理UDP协议,实现实时数据包负载均衡。

SSH跳板机:

通过端口映射安全访问内网服务器。
高可用服务:TCP服务(如MQTT)的主备切换与健康检查。

反向代理,指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器,代理服务器再通过反向代理+负载均衡实现请求分发到应用服务器的一种代理服务。
反向代理服务的特点是代理服务器代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

1,配置nginx七层代理

通过配置nginx七层代理实现转发nginx请求至后端的httpd服务,通过该转发也能实现nginx+httpd的动静分离,动静分离会在后续章节介绍

(1)环境安装

(2)配置nginx七层代理转发

上述配置中,使用upstream定义后端应用服务器的地址池“backend”,在location块中,使用proxy_pass,转发请求至后端地址池,proxy_set_header Host $host:将请求中的Host头部设置为客户端请求的主机名,proxy_set header X-Real-IP$remote_addr:将请求中的X-Real-IP头部设置为客户端的真实IP地址。

(3)验证转发效果

后端地址池中也可以定义多台主机,实现负载均衡

2,配置nginx四层代理

SSH协议是基于TCP协议的,配置nginx的四层代理,实现代理ssh请求至后端服务器,用以登录内网服务器场景

(1)配置四层代理

配置文件

(2)验证四层代理

第二台验证

三,Nginx缓存

Nginx的缓存功能是其核心能力之一,主要用于加速内容响应和降低后端服务器负载它的缓存功能主要基于反向代理(ProxyCache),但也可用于其他场景(如FastCGI 缓存)。以下是详细解析:

1,缓存功能的核心原理和缓存类型

缓存类型作用场景
代理缓存反向代理模式下缓存后端服务器(如Tomcat、Apache)的响应内容。

FastCGI 缓存

缓存PHP/Python等通过FastCG协议处理的动态内容(需配合PHP-FPM使用)。
uWSGI/SCGI 缓存似 FastCGI,用于其他后端协议。
静态资源缓存通过 expires指令设置客户端浏览器缓存(非服务端缓存)。

代理缓存原理:
第一步:客户端第一次向Nginx请求数据A;

第二步:当Nginx发现缓存中没有数据A时,会向服务端请求数据A:

第三步:服务端接收到Nginx发来的请求,则返回数据A到Nginx,并且缓存在Nginx;

第四步:Nginx返回数据A给客户端应用:

第五步:客户端第二次向Nginx请求数据A:

第六步:当Nginx发现缓存中存在数据A时,则不会请求服务端;第七步:Nginx把缓存中的数据A返回给客户端应用。

2,代理缓存功能设置

因代理缓存功能需在反向代理模式下缓存启端服务器(如Tomcat、Apache)的响应内容需要先配置七层反向代理

(1)反向代理配置

(2)设置缓存功能

关键配置解析

proxy_cache_path:定义缓存文件的存储路径
levels=1:2:定义缓存目录的层级结构,1evels=N:M,表示缓存文件路径的层级深度

keys_zone=my_cache:10m 

定义共享内存区域,用于存储缓存键(key)和元数据(如过期时间),10m:共享内存区大小(通常每1MB可存储约8000个键)
inactive=60m:定义缓存内容的闲置有效期。60分钟内未被访问,将被自动删除
max size=1g:定义缓存目录的最大磁盘空间。当缓存量达到1GB 时,Nginx 启动 LRU(最近最少使用)算法清理旧缓存。
use_temp path=off :控制临时文件的存储位置,推荐值:off(减少磁盘操作,提升性能)

(3)验证缓存功能

curl -r 192.168.10.101

四,Nginx rewrite和正则

已成为现代Web服务的核心组件之一。它不仅是负载均衡、反向代理的首选工具,更是实现流量调度、安全防护和动态路由的关键枢纽。而在这其中,Rewrite模块作为Nginx的“规则引擎”,扮演着至关重要的角色--它赋予开发者精准控制URL的能力,让请求的流转不再受限于物理路径,而是通过逻辑规则灵活适配业务需求。
Rewrite的应用场景
路径美化:将/product/123转换为/index.php?id=123
旧链接迁移:将过期URL永久重定向(301)到新地址强制HTTPS/域名统一:自动跳转http://到https://,或合并www与非www域名动态路由:适配单页应用(SPA)、RESTfuIAPI路由灰度发布:按规则将部分流量导向新版本服务

1,Nginx正则

学习Rewrite之前要熟悉正则表达式,表中列举出一些常用的正则表达式元事符

字符描述
^匹配输入字符串的起始位置
$匹配输入字符串的结束位置

*

匹配前面的字符零次或多次。如"ol“"能匹配"o"及“ol”、"ol"
+匹配前面的字符一次或多次。如“ol+“能匹配"ol"及"oI"、“o“”,但不能匹配“o”
?匹配前面的字符零次或一次,例如"do(es)?"能匹配“do"或者“does","?“等效于”(0,1}
.匹配除“""之外的任何单个字符,若要匹配包括“""在内的任意字符,请使用诸如“[\n]之类的模式
\将后面接着的字符标记为一个特殊字符或一个原义字符或一个向后引用。如\匹配个换行符,而“\$"则匹配“$”
\d匹配纯数字
{n}重复n次
{n,}重复n次或更多次
{n,}匹配单个字符c
[a-z]匹配 a-z小写字母的任意一个
[a-zA-Z]匹配a-z小写字母或A-Z大写字母的任意一个

2,nginx location

在学习rewrite前还要了解下location,因为rewrite 通常会与 location 结合使用,但并非绝对。二者的协作能实现更精细的路径控制,1ocation是Nginx中用于匹配请求URI(路径:只能对域名后边的除去传递的参数外的字符串起作用,例如http://www.kgc.com/index.php?id=1 只匹配/index.php)的核心指令,用于根据请求路径定义不同的处理逻辑(如静态资源服务、反向代理、重定向等)

(1)location 的语法

location[匹配模式]{
#处理逻辑(如root,proxy_pass,rewrite等)

匹配模式类型:

模式说明
location /uri普通前缀匹配:匹配以指定路径开头的 URI

location=/精确匹配:

仅匹配完全相同的URI(优先级最高)。
location~
 
区分大小写的正则表达式匹配。
location~*正则匹配:不区分大小写的正则表达式匹配。
location·~精确前缀匹配:匹配前缀路径后,不再检查正则匹配(优先级高于正则)。
location/通用匹配:默认方式,优先级最低,其他方式匹配不到时匹配

location 的优先级规则:
精确匹配 〉精确前缀匹配 〉正则匹配( 和 *同时存在时,文件中物理位置靠上的优先)>普通前缀匹配>通用匹配。

3,Rewrite

(1)Rewrite 语法

rewrite<regex><replacement>[flag];
regex:正则匹配URL字符串(只能对域名后边的除去传递的参数外的字符串起作用,例如
http://www.kgc.com/index.php?id=l 只对/index.php 重写)
replacement:重写跳转后的地址
flag类型:

last:重写后的URI 会重新触发的指令,是默认类型
break:重写后的URI不会重新匹配location,直接在当前location中处理,且后续的 rewrite 指令不再执行
redirect:返回302临时重定向,浏览器地址会显示跳转后的URL地址,爬虫不会更新url(因为是临时)
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url 。

在实际工作的应用中,Nginx跳转需求有三种方式可实现。可以直接用rewrite进行匹配跳转,也可以使用if匹配全局变量后跳转。另外,还可以使用1ocation匹配再跳转所以rewrite 只能放在 server、if{}、location{}配置段中

1.server{}块中的rewrite
执行顺序:在请求进入server块后、匹配location前执行。
作用域:影响该server块下所有请求(全局生效)。

2.location{}块中的rewrite执行顺序:在请求匹配到该location后执行。

作用域:仅对该location匹配的请求生效(局部生效)。
3.if{}块中的 rewrite

执行顺序:在满足if 条件时触发。

作用域:依赖if表达式所在的上下文(如在server中或location中)。

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

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

相关文章

rk3568安全启动功能实践

本文主要讲述笔者在rk3568芯片上开发安全启动功能实践的流程。其中主要参考瑞芯微官方文档《Rockchip_Developer_Guide_Secure_Boot_for_UBoot_Next_Dev_CN.pdf》。文档中描述逻辑不是很清晰而且和当前瑞芯微的sdk中安全启动的流程匹配度不高。本文就不再对瑞芯微官方文档的内容…

[操作系统] 线程互斥

文章目录 背景概念线程互斥的引出互斥量锁的操作初始化 (Initialization)静态初始化动态初始化 加锁 (Locking)阻塞式加锁非阻塞式加锁 (尝试加锁/一般不考虑) 解锁 (Unlocking)销毁 (Destruction)设置属性 (Setting Attributes - 通过 pthread_mutex_init) 锁本身的保护互斥锁…

【神经网络与深度学习】两种加载 pickle 文件方式(joblib、pickle)的差异

引言 从深度学习应用到数据分析的多元化需求出发&#xff0c;Python 提供了丰富的工具和模块&#xff0c;其中 pickle 和 joblib 两种方式在加载数据文件方面表现尤为突出。不同场景对性能、兼容性以及后续处理的要求不尽相同&#xff0c;使得这两种方式各显优势。本文将通过深…

Electron 入门指南

Electron 入门指南 Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用的框架。通过 Electron&#xff0c;你可以利用 Web 技术开发出功能强大的桌面应用程序&#xff0c;并且能够运行在 Windows、Mac 和 Linux 系统上。 本文将带你从零开始构建一个简单的 Ele…

编程中如何与AI交互-结构化输入和理解确认机制

一 结构化输入是什么 &#x1f4cc; 结构化输入的定义&#xff1a; 结构化输入是指以清晰、分层、有逻辑的格式向 AI 输入信息&#xff0c;使其更容易解析内容、抓住重点&#xff0c;并准确回答问题。 &#x1f4e6; 举个例子&#xff08;编程场景&#xff09;&#xff1a; 非…

13:傅里叶变换

傅立叶变换(FT, Fourier Transform)的作用是将一个信号由时域变换到频域。其实就是把数据由横坐标时间、纵坐标采样值的波形图格式&#xff0c;转换为横坐标频率、纵坐标振幅(或相位)的频谱格式。换后可以很明显地看出一些原先不易察觉的特征。 有些信号在时域上是很难看出什么…

基于单片机的音频信号处理系统设计(一)

项目名称:基于单片机的音频信号处理系统设计学院名称:信息学院学生姓名:学号专业年级:指导教师:教师职称:教授企业导师:目 录 摘 要 Abstract 1 前言 1.1研究背景与意义 <

机器学习实操 第一部分 机器学习基础 第8章 降维技术

机器学习实操 第一部分 机器学习基础 第8章 降维技术 内容概要 第8章探讨了降维技术&#xff0c;这些技术在处理高维数据时至关重要。高维数据不仅会使训练过程变得极其缓慢&#xff0c;还会增加找到良好解决方案的难度&#xff0c;这就是所谓的维度灾难问题。幸运的是&#…

微信小程序 XSS 防护知识整理

场景1&#xff1a;用户输入表单&#xff08;如评论框&#xff09; 错误做法&#xff1a;直接渲染未过滤的用户输入 // WXML <view>{{ userInput }}</view>// JS&#xff08;用户输入了恶意内容&#xff09; Page({data: { userInput: <script>alert("…

MySQL 服务搭建

&#x1f4a2;欢迎来到张翊尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 在线安装Ubuntu/Debian更新系统包索引安装 MySQL …

【Java面试笔记:进阶】23.请介绍类加载过程,什么是双亲委派模型?

Java的类加载机制是JVM的核心组成部分,其过程分为三个阶段,并采用双亲委派模型来保证类加载的安全性和一致性。 1.类加载过程 1.加载阶段(Loading) 核心任务:查找并加载类的二进制字节流(如.class文件)。具体行为: 将字节码数据从不同数据源(如文件系统、网络等)读…

UN R79 关于车辆转向装置形式认证的统一规定(正文部分1)

UN R79法规是针对转向装置的型式认证法规&#xff0c;涉及A/B1/C类的横向控制辅助驾驶功能&#xff0c;对各功能的功能边界、性能要求、状态提示、故障警示以及型式认证要提交的信息做了规范&#xff0c;本文结合百度文心一言对法规进行翻译&#xff0c;并结合个人理解对部分内…

[随笔] 升级uniapp旧项目的vue、pinia、vite、dcloudio依赖包等

汇总 # 升级uniapp项目dcloudio整体依赖&#xff0c;建议执行多次 # 会顺带自动更新/升级vue的版本 npx dcloudio/uvmlatest alpha# 检查 pinia 的最新版本 npm view pinia version# 更新项目 pinia 到最新版本 npm update pinia# 更新项目 pinia 到特定的版本 # 首先&#xf…

【使用小皮面板 + WordPress 搭建本地网站教程】

&#x1f680; 使用小皮面板 WordPress 搭建本地网站教程&#xff08;快速上手&#xff09; 本教程将手把手教你如何使用 小皮面板&#xff08;XAMPP 类似工具&#xff09; 和 WordPress 搭建一个完全本地化的网站环境。适合 初学者 / 博主 / Web开发者 本地练习使用&#xf…

[更新完毕]2025五一杯A题五一杯数学建模思路代码文章教学:支路车流量推测问题

完整内容请看文章最下面的推广群 支路车流量推测问题 摘要 本文针对支路车流量推测问题展开研究&#xff0c;通过建立数学模型解决不同场景下的车流量分析需求。 针对问题一&#xff08;Y型道路场景&#xff09;&#xff0c;研究两支路汇入主路的车流量推测。通过建立线性增长…

前端面试宝典---webpack原理解析,并有简化版源码

前言 先看一下webpack打包后的bundle.js&#xff0c;前边的直接扫一眼就过&#xff0c;可以发现这个立即执行函数的形参就是一个&#xff0c;key为引入文件路径&#xff0c;value为该模块代码的函数。 所以比较重要的就是通过webpack的配置文件中的entry的入口文件&#xff0c…

面试的各种类型

面试是用人单位选拔人才的重要环节&#xff0c;常见的面试类型有结构化面试、半结构化面试、非结构化面试和压力面试&#xff0c;每种类型都有其特点和应对策略。 一、结构化面试 特点&#xff1a; 标准化流程 面试流程固定&#xff0c;考官会按照预先设计好的问题清单依次向…

vue3定义全局防抖指令

文章目录 代码参数讲解 在写项目时&#xff0c;总会有要进行防抖节流的时候&#xff0c;如果写一个debounce函数的话 用起来代码总会是有点长的&#xff0c;因此想到了用一个全局指令进行输入框的防抖&#xff0c;毕竟全局指令使用时只要v-xxx就行了&#xff0c;非常方便 代码…

WebDeveloper 流量分析、sudo提权,靶场通关WP

一、信息收集 1、主机探测 arp-scan -l netdiscover -i eth0 -r 192.168.33.0/24 nmap -sP 192.168.66.0/24 2、端口扫描 nmap -sS -sV 192.168.66.141 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0) 80/tcp op…

某化工厂运维升级:智和信通运维平台实现工业交换机智能管理

随着某化工厂数字化转型的加速推进&#xff0c;其生产过程对复杂网络和IT设备的依赖程度日益加深。当前的网络不仅承载着生产控制系统&#xff08;如DCS、PLC等&#xff09;的通信需求&#xff0c;还同时支持办公自动化、安防监控、工业物联网&#xff08;IoT&#xff09;等多种…