【NGINX入门指北】 进阶篇
nginx 进阶篇
文章目录
- nginx 进阶篇
- 一、Nginx Proxy 服务器
- 1、代理原理
- 2、proxy代理
- 3、proxy缓存

一、Nginx Proxy 服务器
1、代理原理
- 正向代理
内网客户机通过代理访问互联网,通常要设置代理服务器地址和端口。

反向代理
外网用户通过代理访问内网服务器,内网服务器无感知。


- 正向代理与反向代理的区别是什么?
2、proxy代理
-
模块:ngx_http_proxy_module
-
语法:
代理
Syntax: proxy_pass_ URL; 代理的后端服务器URL
Default: _
Context: location,if in location,limit_except
缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on | off; # 缓冲开关
Context: http,server,location
proxy_buffering 开启的情况下,nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收完在传给客户端读)
Syntax: proxy_buffersnumber size ;
Default: proxy_buffer_size 4k|8k; # 缓冲区数量
Context: http,server,location
Syntax: proxy_buffer_size size ;
Default: proxy_buffers 8 4k|8k; # 缓冲区大小
Context: http,server,location
Syntax: proxy_busy_buffers_size size ;
Default: proxy_busy_buffers_size 8k|16k; # 忙碌缓冲区的大小,控制同时传递给客户端的buffer数量
Context: http,server,location
头信息
Syntax: proxy_set_header field value ;
Default: proxy_set_header Host $proxy_host ; # 设置真实客户端地址
proxy_set_header Connection close;
Context: http,server,location
超时
Syntax: proxy_connect_timeout time ;
Default: proxy_connect_timeout 60s; # 连接超
Context: http,server,location
Syntax: proxy_read_timeout time ;
Default: proxy_connect_timeout 60s;
Context: http,server,location
Syntax: proxy_send_timeout time ; # nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: proxy_send_timeout 60s;
Context: http,server,location
- 启用代理
环境:两台nginx服务器
| IP | servername |
|---|---|
| 192.168.200.184 | nginx1 |
| 192.168.200.186 | nginx2 |
两台服务器分别安装好nginx
1.nginx1 启动网站(内容)
yum install -y nginx
systemctl start nginx
[root@nginx1 html]# cat /usr/share/nginx/html/index.html
Hello World!
<img src="test.jpg" width=400 border=3 />
[root@nginx1 html]#

2.nginx2 启动代理程序
yum install -y nginx
systemctl start nginx
[root@nginx2 html]# vim /etc/nginx/conf.d/default.conflocation / {proxy_pass http://192.168.200.184: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;# 启动代理程序可以注释掉下面的内容#expires 24h;#root /usr/share/nginx/html;#index index.html index.htm;# root /app;# random_index on;}
[root@nginx2 html]# systemctl restart nginx

3.结果:开启代理之后访问192.168.200.184 和192.168.200.186 的内容一样的


4.观察nginx1服务器的日志
[root@nginx1 html]# cat /var/log/nginx/access.log
192.168.200.186 - - [09/Feb/2023:00:18:24 +0800] "GET /test.jpg HTTP/1.0" 200 350627 "http://192.168.200.186/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "192.168.200.1"
访问成功,记录了客户机的IP和代理服务器的IP
3、proxy缓存
-
缓存类型
网页缓存(公网)CDN
数据库缓存 memcache redis
网页缓存 nginx-proxy
客户端缓存 浏览器缓存 -
模块:ngx_http_proxy_module
-
语法:
缓存开关
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http,server,location
代理缓存
Syntax: proxy_cache_path path [levels=levels] keys_zone=name:size[inactive=time][max_size=size];
Default: _
Context: http
example: proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;
缓存维度
Syntax: proxy_cache_key string; #定义缓存唯一key,通过唯一key来进行hash存取,缓存文件名
Default: proxy_cache_key schemeschemeschemeproxy_host$request_uri;
Context: http,server,location
缓存过期
Syntax: proxy_cache_valid [code…] time;
Default: _
Context: http,server,location
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
- 启动缓存
1.延续代理实验环境
2.设置nginx2为缓存服务器
添加如下配置
[root@nginx2 html]# vim /etc/nginx/nginx.conf
http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
}
[root@nginx2 html]# vim /etc/nginx/conf.d/default.conflocation / {proxy_pass http://192.168.200.184: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_cache; # proxy_cache 使用名为对应的缓存配置proxy_cache_valid 200 304 12h; # 对httpcode为200...的缓存12小时proxy_cache_valid any 10m; #设置不同响应码的缓存时间,除了上面的,其他的存10分钟proxy_cache_key $host$uri$is_args$args; # proxy_cache_key $host$uri 定义缓存唯一key,通过唯一key来进行hash存取add_header Nginx-Cache "$upstream_cache_status"; # add_header:缓存命中情况如何在http头中体现,以及在nginx日志中查看 proxy_cache_path 缓存文件路径proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 出现502~504或错误,会跳过此服务器访问下一台服务器# 启动代理程序可以注释掉下面的内容#expires 24h;#root /usr/share/nginx/html;#index index.html index.htm;# root /app;# random_index on;}[root@nginx1 ~]# touch test01.txt
[root@nginx1 ~]# touch test02.txt
[root@nginx1 ~]# md5sum test01.txt
d41d8cd98f00b204e9800998ecf8427e test01.txt
[root@nginx1 ~]# md5sum test02.txt
d41d8cd98f00b204e9800998ecf8427e test02.txt
[root@nginx1 ~]# [root@nginx2 data]# mkdir -p /data/nginx/cache
[root@nginx2 data]# cd /data/nginx/cache
[root@nginx2 cache]# ls
[root@nginx2 cache]# systemctl restart nginx
3.使用PC客户机,再次访问nginx2服务器
4.通过PC客户机浏览器开发者功能,观察是否命中缓存。
命中:hit


未命中:miss


提示:新创建的网页文件,初次访问均为miss
nginx缓存工作原理
负载均衡部分讲解
相关文章:
【NGINX入门指北】 进阶篇
nginx 进阶篇 文章目录nginx 进阶篇一、Nginx Proxy 服务器1、代理原理2、proxy代理3、proxy缓存一、Nginx Proxy 服务器 1、代理原理 正向代理 内网客户机通过代理访问互联网,通常要设置代理服务器地址和端口。 反向代理 外网用户通过代理访问内网服务器&…...
Python中关于@修饰符、yeild关键词、next()函数的基本功能简述
关于修饰符:其实就是将修饰符下面的函数当成参数传给它上面的函数。 def a(x):print(a)adef b():print(b) 其效果等价为: def a(x):print(a)def b():print(b)a(b())有个记忆诀窍,的下面哪个函数最近,谁就是儿子,谁就…...
结合Coverity扫描Spring Boot项目进行Path Manipulation漏洞修复
本篇介绍使用Coverity 扫描基于Spring Boot 项目中的Path Manipulation 漏洞, 进而解决风险,并且可以通过扫描。 什么样的代码会被扫描有路径操纵风险? 在Spring Boot 项目中, 实验了如下的场景: 1. Control 中 file path 作为参数传递的会被扫描,单纯服务方法不会 场…...
【FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(一)
ffplay入口 ffmpeg\fftools\ffplay.c int main(int argc, char **argv) {/*******************start 动态库加载/网络初始化等**************/int flags;VideoState *is;init_dynload();av_log_set_flags(AV_LOG_SKIP_REPEATED);parse_loglevel(argc, argv, options);/* regis…...
C++蓝桥杯 基础练习,高精度加法,输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
C蓝桥杯 基础练习,高精度加法 问题描述 输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。 定义一…...
MySQL面试题:SQL语句的基本语法
MySQL目录一、数据库入门1. 数据管理技术的三个阶段2. 关系型数据库与非关系型数据库3. 四大非关系型数据库a. 基于列的数据库(column-oriented)b. 键值对存储(Key-Value Stores)c. 文档存储(Document Storesÿ…...
Fluid-数据编排能力原理解析
前言本文对Fluid基础功能-数据编排能力进行原理解析。其中涉及到Fluid架构和k8s csi driver相关知识。建议先了解相关概念,为了便于理解,本文使用JuiceFS作为后端runtime引擎。原理概述Fuild数据编排能力,主要是在云原生环境中,能…...
并发线程、锁、ThreadLocal
并发编程并发编程Java内存模型(JMM)并发编程核心问题—可见性、原子性、有序性volatile关键字原子性原子类CAS(Compare-And-Swap 比较并交换)ABA问题Java中的锁乐观锁和悲观锁可重入锁读写锁分段锁自旋锁共享锁/独占锁公平锁/非公平锁偏向锁/轻量级锁/重…...
CMMI-结项管理
结项管理(ProjectClosing Management, PCM)是指在项目开发工作结束后,对项目的有形资产和无形资产进行清算;对项目进行综合评估;总结经验教训等。结项管理过程域是SPP模型的重要组成部分。本规范阐述了结项管理的规程&…...
网络通信协议是什么?
网络通信基本模式 常见的通信模式有如下2种形式:Client-Server(CS) 、 Browser/Server(BS) 实现网络编程关键的三要素 IP地址:设备在网络中的地址,是唯一的标识。 端口:应用程序在设备中唯一的标识。 协议: 数据在网络中传输的…...
阶段5:Java分布式与微服务实战
目录 第33-34周 Spring Cloud电商实战 一、Eureka-server模块开发 1、引入依赖 2、配置文件 3、启动注解 一、Eureka-server模块开发 第33-34周 Spring Cloud电商实战 一、Eureka-server模块开发 1、引入依赖 父项目依赖:cloud-mall-practice springboot的…...
我的创作纪念日
目录 机缘 收获 日常 憧憬 机缘 其实本来从大一上学期后半段(2017)就开始谢谢零星的博客,只不过当时是自己用hexo搭建了一个小网站,还整了个域名:jiayoudangdang.top,虽然这个早就过期; 后来发现了CSDNÿ…...
Qml学习——动态加载控件
最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 目…...
设计模式之职责链模式
什么是职责链模式 职责链模式是避免请求发送者与接受者耦合在一起,让多个对象都可以接受到请求,从而将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。 职责链模式包含以下几个角色: …...
MySQL入门篇-MySQL 8.0 延迟复制
备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL 延迟复制 概述 MySQL的复制一般都很快,虽然有时候因为 网络原因、大事务等原因造成延迟,但是这个无法人为控制。 生产中可能会存在主库误操作,导致数据被删除了,Oracl…...
FPGA时序约束与分析 --- 实例教程(1)
注意: 时序约束辅助工具或者相关的TCL命令,都必须在 open synthesis design / open implemention design 后才能有效运行。 1、时序约束辅助工具 2、查看相关时序信息 3、一般的时序约束顺序 1、 时序约束辅助工具(1)时序约束编辑…...
go深拷贝和浅拷贝
1、深拷贝(Deep Copy)拷贝的是数据本身,创造一个样的新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值。既然内存地址不同,释…...
linux网络系统层面的配置、管理及操作命令汇总
前几篇文章一一介绍了LINUX进程管理控制命令,关于linux系统中的软件包管理内容等,作为一名运维工程师,前两天刚处理了一起linux网络层面的情况,那么今天这篇文章就以linux网络层面为主题吧。当说到linux网络系统层面,e…...
R数据分析:孟德尔随机化中介的原理和实操
中介本身就是回归,基本上我看到的很多的调查性研究中在中介分析的方法部分都不会去提混杂,都是默认一个三角形画好,中介关系就算过去了,这里面默认的逻辑就是前两步回归中的混杂是一样的,计算中介效应的时候就自动消掉…...
【C++】 类和对象 (下)
文章目录📕再谈构造函数1. 构造函数体赋值2. 初始化列表3. explicit 关键字📕static 成员1. 概念2. static 成员变量3. static 成员函数📕 友元1. 友元函数2. 友元类📕内部类📕编译器优化📕再谈构造函数 1…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
