02--nginx代理缓存

前言:比较常用的用法反向代理,和缓存的一些操作,用虚拟环境复刻出来,里面参数不用详细记录,用作复习,使用时直接查找即可。环境搭建过程参考前一篇文章nginx基础。

1、基础环境

IP角色作用
192.168.189.143编号7:网站服务器nginx网站主页liumuquan.com
192.168.189.144编号8:图形客户端图形化安装用于模拟客户访问
192.168.189.146编号9:代理缓存服务器nginx代理缓存配置演示

nginx安装过程,域名解析配置,网站部署过程参考前文。

2、代理

2.1、代理概念

正向代理服务器和反向代理服务器是两种常见的代理服务器类型。

正向代理服务器: 正向代理服务器作为位于客户端和目标服务器之间的中间服务器,代表客户端发送请求,并将响应转发给客户端。客户端需要通过配置代理服务器来使用正向代理功能。代理服务器会隐藏客户端的真实IP地址,提供隐私保护和访问控制等功能。类比来说,正向代理就像是一个人在代表其他人进行行动,比如有一个中间人去购买商品并带回来。

反向代理服务器: 反向代理服务器作为位于目标服务器和客户端之间的中间服务器,代表目标服务器接收请求,并将响应转发给客户端。客户端无需知道真实的目标服务器,而是向反向代理发送请求。反向代理服务器可以实现负载均衡、缓存、SSL 终端等功能,提高性能和安全性。类比来说,反向代理就像是一个餐馆的前台,接收客人的请求,将请求传递给后台厨房,并将制作好的菜品送回给客人。

区别:

  1. 定位不同:正向代理服务器定位于客户端和目标服务器之间,而反向代理服务器定位于目标服务器和客户端之间。
  2. 配置方式不同:客户端需要单独配置代理服务器才能使用正向代理,而对于反向代理,客户端无需知道真实的目标服务器,直接发送请求给反向代理服务器即可。
  3. 功能不同:正向代理主要用于提供隐私保护和访问控制,隐藏客户端的真实IP地址;反向代理主要用于负载均衡、缓存和提高性能等。
  4. 部署位置不同:正向代理通常部署在客户端所在的网络中,而反向代理通常部署在目标服务器所在的网络中。

总结比喻: 可以将正向代理比作一个个人助手,代表他人完成任务,比如购买商品。反向代理则类似于一家餐馆的前台,接待客人的请求并将其传递给后台厨房,并将制作好的菜品送回给客人。

2.2、nginx代理配置

模块名称:ngx_http_proxy_module

2.2.1、网站服务器

此小节操作在编号7:网站服务器(143)上完成

配置网站配置

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 
server {listen       80;server_name  liumuquan.com;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page  404              /404.html;location = /404.html{root /usr/share/nginx/html;}# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}
}

配置主页显示

[root@localhost ~]# cat /usr/share/nginx/html/index.html 
<!DOCTYPE html>
<html>
<head>
<title>TEST FROMLIUMUQUAN</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>THIS IS LIUMUQUAN</h1>
<p>this is num7 server</p>
<p>ipaddress is 192.168.189.143</p>
<p>THIS is liumuquan.com</p>
</body>
</html>

2.2.2、客户端访问网站服务器

使用144访问143网站,如下图所示

2.2.3、代理服务器

此小节操作在编号9:代理缓存服务器(146)上完成

安装启动nginx

网络环境配置如下

[root@localhost nginx]# systemctl restart nginx
[root@localhost nginx]# systemctl disable firewalld.service 
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@localhost nginx]# systemctl stop firewalld.service 
[root@localhost nginx]# vim /etc/selinux/config 
[root@localhost nginx]# setenforce 0# 此处关闭所有安全机制,用于演示,生产环境中请勿如此操作

具体nginx反向代理配置如下

[root@localhost nginx]# cat /etc/nginx/conf.d/default.conf 
server {listen       80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / { proxy_pass http://192.168.189.143:80;
#定义被代理的服务器地址和端口
proxy_redirect default;
#设置在代理响应中重写与代理服务器相关的头部信息。这里暂时无用,一般用在端口修改后proxy_set_header Host $http_host;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的 Host 头部信息传递给后端服务器
proxy_set_header   X-Real-IP $remote_addr;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的真实 IP 地址传递给后端服务器
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的原始 IP 地址传递给后端服务器,可以包含多个 IP 地址proxy_connect_timeout 30;
#设置与后端服务器建立连接的超时时间,单位为秒
proxy_send_timeout 60;
#设置向后端服务器发送请求的超时时间,单位为秒
proxy_read_timeout 60;
#设置从后端服务器读取响应的超时时间,单位为秒proxy_buffering on;
#启用或禁用代理缓冲
proxy_buffer_size 32k;
#设置单个缓冲区的大小设置单个缓冲区的大小
proxy_buffers 4 128k;
#设置用于保存响应的内存块数和每块的大小
proxy_busy_buffers_size 256k;
#设置当响应速度慢时,Nginx 使用的最大内存量
proxy_max_temp_file_size 256k;
#设置在代理过程中可以创建的临时文件的最大大小#root   /usr/share/nginx/html;#index  index.html index.htm;
#把原页面注释掉}

2.2.4、客户端访问代理服务器

使用144访问146,显示143网站内容,如下图所示

3、缓存

Nginx 缓存是一种机制,用于在代理服务器上缓存响应内容,以便在后续请求中快速返回相同的内容,从而减轻后端服务器的负担并提高网站性能。

模块名称:ngx_http_proxy_module

3.1、缓存类型

  • 网页缓存(公网)CDN
  • 数据库缓存 memcache redis
  • 网页缓存 nginx-proxy
  • 客户端缓存 firefox缓存

3.2、nginx缓存配置

继续使用上面的环境

3.2.1、nginx总文件配置

在146上操作编辑/etc/nginx/nginx.conf 

[root@localhost nginx]# vim /etc/nginx/nginx.conf 
[root@localhost nginx]# cat /etc/nginx/nginx.conf user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {proxy_cache_path /app/liumuquan/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

配置部分为

proxy_cache_path /app/liumuquan/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;

参数详解

  1. proxy_cache_path:指令用于定义代理缓存路径,后面紧跟着路径名和选项。

  2. /app/liumuquan/cache:这里指定了代理缓存的路径,即缓存数据将被存储在 /app/liumuquan/cache 目录下。这个路径可以根据实际需求进行修改。

  3. levels=1:2:这个选项指定了缓存目录结构的层次。在这里,表示将缓存数据分散存储在两级目录结构中,这有助于提高文件查找效率。

  4. keys_zone=proxy_cache:10m:通过 keys_zone 选项指定了一个内存区域用来存储缓存键和元数据。proxy_cache 是内存区域的名称,10m 表示分配给这个内存区域的大小为 10MB。(记录url的)

  5. max_size=10g:这个选项指定了缓存的最大大小为 10GB。一旦缓存大小达到设定的最大值,Nginx 将根据缓存策略清理缓存项。(记录网页内容的)

  6. inactive=60m:表示缓存项在指定时间内没有被访问时会被标记为“不活跃”,默认为 10 分钟。在本例中,设置为 60 分钟,意味着缓存项在 60 分钟内没有被访问将被认为是不活跃的,会被从内存中删除。

  7. use_temp_path=off:这个选项表示禁用临时路径。默认情况下,Nginx 会使用一个临时路径来存储正在传输的响应数据,然后再将其移动到缓存路径。通过设置为 off,可以直接将响应数据存储在缓存路径中,提高性能。(建议不要开,硬盘存储很慢)

3.3.2、默认网页文件配置

[root@localhost nginx]# vim /etc/nginx/conf.d/default.conf  
[root@localhost nginx]# cat /etc/nginx/conf.d/default.conf  
server {listen       80;server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {proxy_pass http://192.168.189.143: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 30;
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; #状态码为 200 和 304 的请求,缓存的有效期为 12 小时
proxy_cache_valid any 10m;  #除了 200 和 304,缓存的有效期为 10 分钟proxy_cache_key $host$uri$is_args$args;
#请求的缓存的关键字定义方式为 主机 请求地址 传递的参数 参数的变量add_header  Nginx-Cache "$upstream_cache_status";  
#追加头部,用来返回到浏览器的cache属性是否缓存告知信息来源proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#如果出现连接错误、超时、无效头部或者特定的 HTTP 状态码(如 500、502、503、504),Nginx 将会尝试向下一个后端服务器发起请求,而不是中断连接#root   /usr/share/nginx/html;#index  index.html index.htm;}

3.3.3、建立缓存文件夹

[root@localhost nginx]# mkdir -p /app/liumuquan/cache
[root@localhost nginx]# systemctl restart nginx配置完成后重启报错可以查看日志或使用nginx -t 排错

3.3.4、客户端访问缓存服务器

首先在网页主目录建立一个全新的文档,保证不可能出现缓存,此操作在编号7:网站服务器(143)上完成

[root@localhost ~]# cp 1.jpg /usr/share/nginx/html/
[root@localhost ~]# ls /usr/share/nginx/html/
1.jpg  404.html  404.jpg  50x.html  index.html

使用客户端144访问缓存服务器,查看nginx-cache属性

第一次访问如下图所示

第二次访问如下图所示

3.3、缓存清理

清理 Nginx 缓存通常是通过删除缓存文件或者利用 Nginx 提供的相关指令来实现的。以下是几种常见的清理 Nginx 缓存的方法:

  1. 手动删除缓存文件

    • 手动删除 Nginx 缓存目录中的文件是一种简单直接的方法。你可以通过文件管理器或者命令行操作来删除指定目录下的缓存文件。缓存目录的位置通常在 Nginx 配置文件中定义的 proxy_cache_path 指令中。
    • 例如,如果缓存路径是 /app/liumuquan/cache,你可以通过执行命令 rm -rf /app/liumuquan/cache/* 来删除该目录下的所有缓存文件。
  2. 使用 Nginx 提供的 proxy_cache_purge 模块

    • Nginx 的 proxy_cache_purge 模块可以用于通过 HTTP 请求方式清理缓存。要使用该模块,首先需要在 Nginx 配置中启用该模块,并配置允许的 IP 地址。
    • 然后,在需要清理缓存的地方,你可以发送特定的 HTTP 请求来触发 Nginx 清理缓存。例如,可以使用 curl 命令发送一个 PURGE 请求,指定需要清理缓存的 URI。
  3. 定期清理策略

    • 可以设置定期任务(例如 cron 任务),周期性地清理 Nginx 缓存。这可以通过在系统中设置一个定时任务,定期执行清理缓存的命令来实现。
    • 例如,可以创建一个 cron 任务,在每天的凌晨执行清理缓存的命令,以确保缓存文件保持在合理的大小。

无论采用哪种方法,都需要谨慎操作,以免误删重要文件或者造成不必要的性能问题。最好在生产环境中进行缓存清理操作前进行测试,以确保其不会对系统造成不良影响。

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

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

相关文章

编译安装gcc-11及可能遇到的bug

编译安装脚本 GCC_VERSION11.1.0 PACKAGE_DIR/path/to/gcc/source/code GCC_DIR$PACKAGE_DIR/gcc-$GCC_VERSION GCC_INSTALL_DIR/path/to/install/gccmkdir -p $GCC_INSTALL_DIR cd $GCC_INSTALL_DIR rm -rf * cd $PACKAGE_DIR rm -rf gcc-$GCC_VERSION if [ ! -f "gcc-$…

freertos初体验 - 在stm32上移植

1. 说明 freertos内核 非常精简&#xff0c;代码量也很少&#xff0c;官方也针对主流的编译器和内核准备好了移植文件&#xff0c;所以 freertos 的移植是非常简单的&#xff0c;很多工具&#xff08;例如CubeMX&#xff09;点点鼠标就可以生成一个 freertos 的工程&#xff0…

ubuntu18.04安装pycharm2024.1.2后,创建快捷方式图标

Ubuntu 18.04 安装 PyCharm并创建快捷方式_untuntu018.04 pycharm怎么创建快捷方式-CSDN博客

探秘Spring Bean之单例奥秘:源码深析与高级应用

1. 引言 在Spring框架中&#xff0c;Bean的作用域是控制Bean实例创建和管理的重要概念。深入理解Bean的作用域&#xff0c;尤其是单例作用域&#xff08;Singleton&#xff09;&#xff0c;对于优化系统性能、提升线程安全性以及管理资源等方面具有至关重要的作用。本文将围绕…

AquaCrop农业水资源管理,模拟作物生长过程中水分的需求与消耗

AquaCrop是由世界粮食及农业组织&#xff08;FAO&#xff09;开发的一个先进模型&#xff0c;旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理&#xff0c;特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

VR导航的实现原理、技术优势和应用场景

VR导航通过虚拟现实技术提供沉浸式环境&#xff0c;结合室内定位技术实现精准导航。目前&#xff0c;VR导航已在多个领域展现出其独特的价值和潜力&#xff0c;预示着智能导航系统的未来发展。 一、实现原理 VR导航技术依托于虚拟现实(VR)和室内定位系统。VR技术利用计算机模…

Python考试复习---day5

1.打印商品名 ainput().split() print("商品列表&#xff1a;") for i,name in enumerate(a):print("{}\t{}".format(i,name))enumerate----枚举--利用它可以同时获得索引和值 enumerate多用于在for循环中得到计数 例如&#xff1a; list1 ["这&qu…

算法刷题笔记 数组元素的目标和(C++实现)

文章目录 题目描述解题思路实现代码 题目描述 给定两个升序排序的有序数组A和B&#xff0c;以及一个目标值x。数组下标从0开始。请你求出满足A[i]B[j]x的数对 (i,j)。数据保证有唯一解。 输入格式 第一行包含三个整数n,m,x分别表示A的长度&#xff0c;B的长度以及目标值x。第…

Netty SSL双向验证

Netty SSL双向验证 1. 环境说明2. 生成证书2.1. 创建根证书 密钥证书2.2. 生成请求证书密钥2.3. 生成csr请求证书2.4. ca证书对server.csr、client.csr签发生成x509证书2.5. 请求证书PKCS#8编码2.6. 输出文件 3. Java代码3.1. Server端3.2. Client端3.3. 证书存放 4. 运行效果4…

Java 高级语法

语法&#xff1a;Arrays.asList(值1&#xff0c;值2&#xff0c;....) 作用&#xff1a;它可以把一个数组或者多个参数转换成一个 List 集合 代码演示&#xff1a; //创建一个List类型的集合&#xff0c;其值为Integer类型&#xff0c;集合包含1,2,3三个数值 List<Intege…

消费者组到底是什么?no.15

Kafka的消费者组。 消费者组&#xff0c;即Consumer Group&#xff0c;应该算是Kafka比较有亮点的设计了。那么何谓Consumer Group呢&#xff1f;用一句话概括就是&#xff1a;Consumer Group是Kafka提供的可扩展且具有容错性的消费者机制。既然是一个组&#xff0c;那么组内必…

JavaScript 贪心算法(Greedy Algo)

贪婪是一种算法范式&#xff0c;它逐步构建解决方案&#xff0c;始终选择提供最明显和直接收益的下一个部分。贪婪算法用于解决优化问题。 如果问题具有以下属性&#xff0c;则可以使用贪心法解决优化问题&#xff1a; 每一步&#xff0c;我们都可以做出当前看来最好的选择&…

python项目中的日志定义

python日志定义&#xff0c;包含配置文件&#xff0c;和日志实例创建方法 一、日志创建方法&#xff0c;创建一个loger实例 import loggingdef get_logger(name):# 创建一个loggerlogger logging.getLogger(name)# 设置日志级别logger.setLevel(logging.INFO)# 创建一个日志…

elasticsearch有什么用

Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;它被广泛用于构建实时的、可扩展的搜索和分析应用程序。以下是Elasticsearch的主要用途和功能&#xff1a;12 全文搜索&#xff1a;Elasticsearch提供强大的全文搜索功能&#xff0c;可以处理大量的文本数据&…

开源模型应用落地-知识巩固-如何正确搭建生产级AI服务(一)

一、前言 将大语言模型集成至vllm,能够显著实现推理加速,让模型在处理任务时更加高效快捷,极大地提升了响应速度,减少用户等待时间。具体而言,一方面它能大幅提高吞吐量,vLLM 借助 PagedAttention巧妙地对attention中缓存的张量进行高效管理,从而达成比 HuggingFace Tra…

路由器的工作原理

5.1路由器的工作原理 如图5-1所示配置IP地址&#xff08;此处省略&#xff0c;请读者自行配置&#xff09;&#xff0c;配置完成后&#xff0c;我们在R1上分别ping 12.1.1.2 、23.1.1.2、23.1.1.3&#xff0c;我们可以发现&#xff0c;在R1上ping 12.1.1.2可以通&#xff0c;但…

光电耦合器:航天航空领域的先进连接技术

光电耦合器作为一种关键的电子连接器&#xff0c;在航天航空领域扮演着重要角色。本文将深入探讨光电耦合器在航天航空领域的应用及其技术特点。 光电耦合器在航天航空领域的应用 光电耦合器作为一种高可靠性、高速传输、抗干扰能力强的连接器&#xff0c;在航天航空领域有着广…

释放视频潜力:Topaz Video AI for mac/win 一款全新的视频增强与修复利器

在数字时代&#xff0c;视频已经成为我们记录生活、分享经历的重要方式。然而&#xff0c;有时候我们所拍摄的视频可能并不完美&#xff0c;可能存在模糊、噪点、抖动等问题。这时候&#xff0c;就需要一款强大的视频增强和修复工具来帮助我们提升视频质量&#xff0c;让它们更…

MT8781安卓核心板_MTK联发科Helio G99核心板规格参数

MT8781安卓核心板采用先进的台积电6纳米级芯片生产工艺&#xff0c;配备高性能Arm Cortex-A76处理器和Arm Mali G57 GPU&#xff0c;加上LPDDR4X内存和UFS 2.2存储&#xff0c;在处理速度和数据访问速度上都有着出色的表现。 MT8781还支持120Hz显示器&#xff0c;无需额外的DSC…

资深开发推荐的IDEA 插件

开发如虎添翼 工欲善其事&#xff0c;必先利其器。想要提升编程开发效率&#xff0c;必须选择一款顺手的开发工具&#xff0c;插件不在多&#xff0c;而在精&#xff0c;作为从业10年的程序员&#xff0c;我目前用到这十几个插件&#xff0c;在平时开发&#xff0c;代码review…