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

【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服务器
IPservername
192.168.200.184nginx1
192.168.200.186nginx2

两台服务器分别安装好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、代理原理 正向代理 内网客户机通过代理访问互联网&#xff0c;通常要设置代理服务器地址和端口。 反向代理 外网用户通过代理访问内网服务器&…...

Python中关于@修饰符、yeild关键词、next()函数的基本功能简述

关于修饰符&#xff1a;其实就是将修饰符下面的函数当成参数传给它上面的函数。 def a(x):print(a)adef b():print(b) 其效果等价为&#xff1a; def a(x):print(a)def b():print(b)a(b())有个记忆诀窍&#xff0c;的下面哪个函数最近&#xff0c;谁就是儿子&#xff0c;谁就…...

结合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蓝桥杯 基础练习&#xff0c;高精度加法 问题描述 输入两个整数a和b&#xff0c;输出这两个整数的和。a和b都不超过100位。 算法描述 由于a和b都比较大&#xff0c;所以不能直接使用语言中的标准数据类型来存储。对于这种问题&#xff0c;一般使用数组来处理。   定义一…...

MySQL面试题:SQL语句的基本语法

MySQL目录一、数据库入门1. 数据管理技术的三个阶段2. 关系型数据库与非关系型数据库3. 四大非关系型数据库a. 基于列的数据库&#xff08;column-oriented&#xff09;b. 键值对存储&#xff08;Key-Value Stores&#xff09;c. 文档存储&#xff08;Document Stores&#xff…...

Fluid-数据编排能力原理解析

前言本文对Fluid基础功能-数据编排能力进行原理解析。其中涉及到Fluid架构和k8s csi driver相关知识。建议先了解相关概念&#xff0c;为了便于理解&#xff0c;本文使用JuiceFS作为后端runtime引擎。原理概述Fuild数据编排能力&#xff0c;主要是在云原生环境中&#xff0c;能…...

并发线程、锁、ThreadLocal

并发编程并发编程Java内存模型&#xff08;JMM&#xff09;并发编程核心问题—可见性、原子性、有序性volatile关键字原子性原子类CAS(Compare-And-Swap 比较并交换)ABA问题Java中的锁乐观锁和悲观锁可重入锁读写锁分段锁自旋锁共享锁/独占锁公平锁/非公平锁偏向锁/轻量级锁/重…...

CMMI-结项管理

结项管理&#xff08;ProjectClosing Management, PCM&#xff09;是指在项目开发工作结束后&#xff0c;对项目的有形资产和无形资产进行清算&#xff1b;对项目进行综合评估&#xff1b;总结经验教训等。结项管理过程域是SPP模型的重要组成部分。本规范阐述了结项管理的规程&…...

网络通信协议是什么?

网络通信基本模式 常见的通信模式有如下2种形式&#xff1a;Client-Server(CS) 、 Browser/Server(BS) 实现网络编程关键的三要素 IP地址&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识。 端口&#xff1a;应用程序在设备中唯一的标识。 协议: 数据在网络中传输的…...

阶段5:Java分布式与微服务实战

目录 第33-34周 Spring Cloud电商实战 一、Eureka-server模块开发 1、引入依赖 2、配置文件 3、启动注解 一、Eureka-server模块开发 第33-34周 Spring Cloud电商实战 一、Eureka-server模块开发 1、引入依赖 父项目依赖&#xff1a;cloud-mall-practice springboot的…...

我的创作纪念日

目录 机缘 收获 日常 憧憬 机缘 其实本来从大一上学期后半段(2017)就开始谢谢零星的博客&#xff0c;只不过当时是自己用hexo搭建了一个小网站&#xff0c;还整了个域名&#xff1a;jiayoudangdang.top&#xff0c;虽然这个早就过期&#xff1b; 后来发现了CSDN&#xff…...

Qml学习——动态加载控件

最近在学习Qml&#xff0c;但对Qml的各种用法都不太熟悉&#xff0c;总是会搞忘&#xff0c;所以写几篇文章对学习过程中的遇到的东西做一个记录。 学习参考视频&#xff1a;https://www.bilibili.com/video/BV1Ay4y1W7xd?p1&vd_source0b527ff208c63f0b1150450fd7023fd8 目…...

设计模式之职责链模式

什么是职责链模式 职责链模式是避免请求发送者与接受者耦合在一起&#xff0c;让多个对象都可以接受到请求&#xff0c;从而将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理为止。     职责链模式包含以下几个角色&#xff1a;    …...

MySQL入门篇-MySQL 8.0 延迟复制

备注:测试数据库版本为MySQL 8.0 这个blog我们来聊聊MySQL 延迟复制 概述 MySQL的复制一般都很快&#xff0c;虽然有时候因为 网络原因、大事务等原因造成延迟&#xff0c;但是这个无法人为控制。 生产中可能会存在主库误操作&#xff0c;导致数据被删除了&#xff0c;Oracl…...

FPGA时序约束与分析 --- 实例教程(1)

注意&#xff1a; 时序约束辅助工具或者相关的TCL命令&#xff0c;都必须在 open synthesis design / open implemention design 后才能有效运行。 1、时序约束辅助工具 2、查看相关时序信息 3、一般的时序约束顺序 1、 时序约束辅助工具&#xff08;1&#xff09;时序约束编辑…...

go深拷贝和浅拷贝

1、深拷贝&#xff08;Deep Copy&#xff09;拷贝的是数据本身&#xff0c;创造一个样的新对象&#xff0c;新创建的对象与原对象不共享内存&#xff0c;新创建的对象在内存中开辟一个新的内存地址&#xff0c;新对象值修改时不会影响原对象值。既然内存地址不同&#xff0c;释…...

linux网络系统层面的配置、管理及操作命令汇总

前几篇文章一一介绍了LINUX进程管理控制命令&#xff0c;关于linux系统中的软件包管理内容等&#xff0c;作为一名运维工程师&#xff0c;前两天刚处理了一起linux网络层面的情况&#xff0c;那么今天这篇文章就以linux网络层面为主题吧。当说到linux网络系统层面&#xff0c;e…...

R数据分析:孟德尔随机化中介的原理和实操

中介本身就是回归&#xff0c;基本上我看到的很多的调查性研究中在中介分析的方法部分都不会去提混杂&#xff0c;都是默认一个三角形画好&#xff0c;中介关系就算过去了&#xff0c;这里面默认的逻辑就是前两步回归中的混杂是一样的&#xff0c;计算中介效应的时候就自动消掉…...

【C++】 类和对象 (下)

文章目录&#x1f4d5;再谈构造函数1. 构造函数体赋值2. 初始化列表3. explicit 关键字&#x1f4d5;static 成员1. 概念2. static 成员变量3. static 成员函数&#x1f4d5; 友元1. 友元函数2. 友元类&#x1f4d5;内部类&#x1f4d5;编译器优化&#x1f4d5;再谈构造函数 1…...

asp获取毫秒时间戳的方法 asp获取13位时间戳的方案

一、背景。时间戳就是计算当前与"1970-01-01 08:00:00"的时间差&#xff0c;在asp中通常是使用Datediff函数来计算两个日期差&#xff0c;代码&#xff1a;timestamp Datediff("s", "1970-01-01 08:00:00",now)返回结果&#xff1a;1675951060可…...

Python基础篇(十五)-- Python程序接入MySQL数据库

程序运行时&#xff0c;数据都在内存中&#xff0c;程序终止时&#xff0c;需要将数据保存到磁盘上。为了便于程序保存和读取&#xff0c;并能直接通过条件快速查询到指定数据&#xff0c;数据库(Database)应运而生&#xff0c;本篇主要学习使用Python操作数据库&#xff0c;在…...

程序员不得不知道的 API 接口常识

说实话&#xff0c;我非常希望自己能早点看到本篇文章&#xff0c;大学那个时候懵懵懂懂&#xff0c;跟着网上的免费教程做了一个购物商城就屁颠屁颠往简历上写。 至今我仍清晰地记得&#xff0c;那个电商教程是怎么定义接口的&#xff1a; 管它是增加、修改、删除、带参查询…...

【项目精选】基于Java的银行排号系统的设计与实现

银行排号系统是为解决一些服务业营业大厅排队问题而设计的&#xff0c;它能够有效地提高工作人员的工作效率&#xff0c;也能够使顾客合理的安排等待时间&#xff0c;让顾客感到服务的公平公正。论文首先讨论了排号系统的背景、意义、应用现状以及研究与开发现状。本文在对C/S架…...

前端 基于 vue-simple-uploader 实现大文件断点续传和分片上传

文章目录一、前言二、后端部分新建Maven 项目后端pom.xml配置文件 application.ymlHttpStatus.javaAjaxResult.javaCommonConstant.javaWebConfig.javaCheckChunkVO.javaBackChunk.javaBackFileList.javaBackChunkMapper.javaBackFileListMapper.javaBackFileListMapper.xmlBac…...

解决报错: ERR! code 128npm ERR! An unknown git error occurred

在github下载的项目运行时&#xff0c;进行npm install安装依赖时&#xff0c;出现如下错误&#xff1a;npm ERR! code 128npm ERR! An unknown git error occurrednpm ERR! command git --no-replace-objects ls-remote ssh://gitgithub.com/nhn/raphael.gitnpm ERR! gitgithu…...

聊城高新技术企业认定7项需要注意的问题 山东同邦科技分享

聊城高新技术企业认定7项需要注意的问题 山东同邦科技分享 山东省高新技术企业认定办公室发布《关于开展2021年度本市高新技术企业认定管理工作的通知》&#xff0c;高企认定中有哪些问题需要注意呢&#xff1f;下面我们一起来看一下。 一、知识产权 知识产权数量和质量双达…...

菊乐食品更新IPO招股书:收入依赖单一地区,规模不及认养一头牛

近日&#xff0c;四川菊乐食品股份有限公司&#xff08;下称“菊乐食品”&#xff09;预披露更新招股书&#xff0c;准备在深圳证券交易所主板上市&#xff0c;保荐机构为中信建投证券。据贝多财经了解&#xff0c;这已经是菊乐食品第四次冲刺A股上市&#xff0c;此前三次均未能…...

Elasticsearch安装IK分词器、配置自定义分词词库

一、分词简介 在Elasticsearch中&#xff0c;假设搜索条件是“华为手机平板电脑”&#xff0c;要求是只要满足了其中任意一个词语组合的数据都要查询出来。借助 Elasticseach 的文本分析功能可以轻松将搜索条件进行分词处理&#xff0c;再结合倒排索引实现快速检索。Elasticse…...

Linux嵌入式开发——shell脚本

文章目录Linux嵌入式开发——shell脚本一、shell脚本基本原则二、shell脚本语法2.1、编写shell脚本2.2、交互式shell脚本2.3、shell脚本的数值计算2.4、test命令&&运算符||运算符2.5、中括号[]判断符2.6、默认变量三、shell脚本条件判断if thenif then elsecase四、she…...

做购物网站怎么赚钱/seo和sem的区别与联系

NOIP2018 复盘 前言 在这里立一个可能无法实现的flag&#xff1a; 把NOIP从古至今&#xff08;luogu上有&#xff09;的每一年都写一篇复盘&#xff01;&#xff01;&#xff01; 伏拉格综合征开始了 在复盘就不讲那些伤心的话了。 D1T1 铺设道路 考试时居然不知道这道题是原题…...

站长之家新网址/windows优化大师提供的

在命令行 输入 mysql -uroot -p123456 (-u账号 -p密码)登入mysql服务器 1.设置mysql密码set password for rootlocalhost password(123456); --所有sql语句都要以分号‘ &#xff1b;’结尾 2.查看当前服务器有哪些数据库show databases; 3.切换工作数据库(use 库名)use test;…...

wordpress网易云音乐自定义css/阿里指数官网最新版本

关注并标星百问科技嵌入式干货&#xff0c;第一时间送达------感谢各位耐心等候。昨天更新蓝牙第4节&#xff1a;009.蓝牙系统从零讲解/第02课_BLE协议栈/第03节_BLE协议各层数据格式概述 &#xff0c;这节依然免费试看&#xff0c;下一节开始加密收费。主讲&#xff1a;BLE协议…...

抚宁网站建设/推广普通话宣传语100字

已结贴√问题点数&#xff1a;10 回复次数&#xff1a;21关于田忌赛马问题.。。帮忙看下。。谢谢了。。题目描述Here is a famous story in Chinese history."That was about 2300 years ago. General Tian Ji was a high official in the country Qi. He likes to play h…...

焦作交友网站开发公司/知名网页设计公司

本文转自&#xff1a;https://blog.csdn.net/whm18322394724/article/details/80177950 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/whm18322394724/article/details/80177950正文小菜继续学习积累中&#xff0c;今天做…...

福田欧曼价格/网站推广优化招聘

Topshelf是一个开源的跨平台的宿主服务框架&#xff0c;只需要几行代码就可以构建一个很方便使用的windows服务。 首先安装nuget包 Topshelf。 创建一个.net core控制台程序 1 static void Main(string[] args)2 {3 #region 容器注入4 var services …...