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 任务,在每天的凌晨执行清理缓存的命令,以确保缓存文件保持在合理的大小。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AWR设置工程仿真频率、原理图仿真频率、默认单位

AWR设置工程仿真频率、原理图仿真频率、默认单位 生活不易&#xff0c;喵喵叹气。马上就要上班了&#xff0c;公司的ADS的版权紧缺&#xff0c;主要用的软件都是NI 的AWR&#xff0c;只能趁着现在没事做先学习一下子了&#xff0c;希望不要裁我。 最近稍微学习了一下AWR这个软…

参加质量源于设计QbD培训能学到什么

近年来&#xff0c;产品质量已经成为了企业能否立足市场的关键。因此&#xff0c;质量源于设计&#xff08;QbD&#xff09;的理念应运而生&#xff0c;它强调在产品开发初期就注重质量设计&#xff0c;以最大限度地降低潜在风险&#xff0c;提高产品的稳定性和可靠性。参加质量…

诺亚财富——财富管理行业的进化逻辑

詹姆斯•卡斯的著作《有限与无限的游戏》中&#xff0c;传递出这样一种观点&#xff1a; “有限的游戏&#xff0c;其目的在于赢得胜利&#xff1b;无限的游戏&#xff0c;却旨在让游戏永远进行下去。有限的游戏在边界内玩&#xff0c;无限的游戏玩的就是边界。” 在商业社会…

我的app开始养活我了

大家在日常使用各类 app 时应该会发现&#xff0c;进入 app 会有个开屏广告&#xff0c;在使用 app 中&#xff0c;时不时的也会有广告被我们刷到。 这时候如果我们看完了这个广告&#xff0c;或者点击了这个广告的话&#xff0c;app商家就会获得这个广告的佣金。 这个佣金就是…

用WebStorm和VS Code断点调试Vue

大家好&#xff0c;我是咕噜铁蛋&#xff01;。今天&#xff0c;我想和大家分享一下如何在WebStorm和VS Code这两款流行的开发工具中&#xff0c;使用断点调试Vue.js项目。Vue.js作为前端三大框架之一&#xff0c;以其轻量级和组件化的特性&#xff0c;受到了广大开发者的喜爱。…

18、matlab信号生成与预处理--剔除异常值:hampel()函数

1、语法 说明&#xff1a;对输入向量x应用Hampel滤波器来检测和去除异常值。 1&#xff09;y hampel(x) 参数&#xff1a;x&#xff1a;输入信号 y:预处理的输出信号 对于x的每个样本&#xff0c;函数计算由样本及其周围的六个样本组成的窗口的中位数&#xff0c;每边三…

Linux下的Git应用及配置

1、卸载 2、安装 3、创建并初始化 4、配置 &#xff08;附加删除语句&#xff09; 5、查看&#xff08;tree .git/&#xff09; 6、增加和提交 7、打印日志 8、验证已操作工作

LeetCode刷题:反转链表

leetCode真题 206. 反转链表 属于基础简单题目 常见的做法有递归和while循环 递归 // 1. 递归参数和返回值public static ListNode reverseList(ListNode head) {// 1. 递归终止条件if (head null || head.next null) {return head;}// 递归逻辑ListNode last reverseL…

安全攻防知识——CTF之MISC

前言&#xff1a; 本周技术分享将介绍安全攻防知识中的MISC部分。MISC&#xff0c;中文即杂项&#xff0c;包括隐写、数据还原、脑洞、社会工程、压缩包解密、流量分析取证、与信息安全相关的大数据等。让我们一起来了解更多吧&#xff01; 一&#xff09;文件结构简介 1.常见…

手把手制作Vue3+Flask全栈项目 全栈开发之路实战篇 问卷网站(一)login页面

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

Memory测试工具-lmbench使用详解

✨前言&#xff1a; 什么是lmbench&#xff1f; lmbench 是一个广泛使用的、开源的系统性能测量工具&#xff0c;它能对Unix-like操作系统&#xff08;包括Linux、BSD等&#xff09;进行全面的性能测试。这个套件包含了一系列针对不同系统组件&#xff08;如处理器、内存、文件…

吴恩达2022机器学习专项课程C2W2:2.23 选修_反向传播算法的工作原理(什么是导数图计算大型神经网络)

目录 引言一.导数的计算1.epsilon与导数的关系2.其它导数符号形式3.导数小结 二.小型神经网络的计算图1.什么是计算图&#xff08;前向传播过程&#xff09;2.反向传播计算过程3.验证反向传播的计算结果4.为什么用反向传播计算导数&#xff1f; 三.扩大神经网络的计算图1.计算反…

迅狐短剧小程序源码:打造个性化的追剧体验

随着移动互联网的普及&#xff0c;短剧小程序源码的开发成为了影视爱好者的新宠。它不仅为用户提供了便捷的追剧体验&#xff0c;还通过推荐系统、观看历史、个性化喜好等特色功能&#xff0c;满足了用户的多样化需求。本文将深入探讨短剧小程序源码的特点、优势以及如何实现多…

Linux和windows之间文件传输解决方案

我们初学Linux时&#xff0c;经常会在windows下载软件或者文档&#xff0c;然后想办法从windows上传输到Linux上&#xff1b;还有Linux上的文件&#xff0c;我们想再Windows上储存&#xff0c;这时&#xff0c;就会用到Linux和windows之间文件传输&#xff01;&#xff01; 一…

ant X6高亮

先附上效果图 // 节点内属性的点击事件&#xff1a;node:port:click graph.on(‘node:port:click’, ({ node, port }) > { resetAllHighlights(); highlightPort(node, port, true); highlightEdgesForPort(port, new Set()); }); // 以下为源码 <template><div…

Win11下只支持IE浏览器的老网站顺畅运行的方法

在Windows 11操作系统中&#xff0c;由于Internet Explorer&#xff08;IE&#xff09;浏览器的逐步淘汰&#xff0c;微软官方已不再直接支持IE浏览器。然而&#xff0c;当您遇到必须访问仅支持IE的老旧网站时&#xff0c;Windows 11仍然提供了一些实用的替代方案来应对这一挑战…

GA/T 1400视频汇聚平台EasyCVR级联后,平台显示无通道是什么原因?

国标GB28181安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快&#xff0c;可支持的主流标准协议有GA/T 1400、国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。 有用户反馈&#xff…

【python】OpenCV—Bitplane

学习来自&#xff1a; 位平面分割&#xff08;Bit-Plane Slicing&#xff09;使用OpenCVPython进行图像处理的初学者指南 位平面 位平面&#xff08;bitplane&#xff09;是一个在计算机科学中用于描述图像数据的概念&#xff0c;具体定义如下&#xff1a; 【定义】&#x…

22、matlab锯齿波、三角波、方波:rectpuls()函数/sawtooth()函数/square()函数

1、采样的非周期性矩形 语法 语法1&#xff1a;y rectpuls(t) 返回一个以数组 t 中指示的采样时间采样的连续非周期性单位高度矩形脉冲&#xff0c;该矩形脉冲以 t 0 为中心。 语法2&#xff1a;y rectpuls(t,w) 生成一个宽度为 w 的矩形 参数 t:采样时间 w:矩形宽度…

网络编程(五)

网络编程&#xff08;五&#xff09; 网络服务器超时检测使用select进行超时检测套接字属性**getsockopt:获取socket软通道的某项属性值**setsockopt:设置socket软通道的某项属性值**&#xff08;socket建立之后就可使用&#xff09; 信号**signal()&#xff1a;信号处理函数se…