4.Nginx缓存设置和CDN

2023-11-04

Nginx缓存设置

设置缓存

##在yum配置文件中添加nginx在线源


vim /etc/yum.repos.d/nginx.repo


[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
##yum安装nginx
yum -y install nginx
##修改配置文件,在192.168.242.69主机上作为nginx的缓存服务器

vim /etc/nginx/nginx.conf

##在http配置块配置

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m 
max_size=10g 
inactive=60m 
use_temp_path=off;
    
 
 
 ##配置写法
 
upstream cache_server{
        server 192.168.242.68:80;
        server 192.168.242.69:80;
}


##nginx可以在缓存服务器的基础上做动静分离
##配置动态服务器的网口端口
upstream tomcat_server{
        server XXX:8082;
        server XXX:80;
}
 
 
 
    
}    
##创建缓存需要的文件夹
mkdir -p /data/nginx/cache
###配置文件解释

path:强制参数,指定缓存文件的存放路径。

levels:定义了缓存目录的层级。每层可以用1(最多16种选择,0-f)或2(最多256种选择,00-ff)表示,中间用 : 分隔。

proxy_cache_path /data/nginx/cache;  代表所有缓存只有一个目录,比如/data/nginx/cache/d7b6e5978e3f042f52e875005925e51b

proxy_cache_path /data/nginx/cache levels=1:2;  代表缓存是二层目录(有16*256=4096个目录),比如/data/nginx/cache/b/51/d7b6e5978e3f042f52e875005925e51b


keys_zone:强制参数,定义共享内存区的名称和大小,该共享内存用于保存缓存项目的元数据(所有活动的key和缓存数据相关的信息),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key。

inactive:删除指定时间内未被访问的缓存文件,默认10分钟。

max_size:设置了缓存存储的上限,如果不指定,最大会用掉所有磁盘空间。

use_temp_path:直接把临时文件放在缓存目录中。
###设置缓存


vim /etc/nginx/conf.d/default.conf



###配置文件解释
server {
        listen 80;
        server_name www.ggl.com;
        location / {
            proxy_cache my_cache;        
#指定用于页面缓存的共享内存,zone名称由proxy_cache_path指令定义


            proxy_cache_valid 200 5m;           
#为不同的响应状态码设置不同的缓存时间,此为缓存状态码为200的请求,缓存时长为5分钟

            proxy_cache_key $request_uri;      
            #指定缓存文件的key为请求的URI
            
            
add_header Nginx-Cache-Status $upstream_cache_status      #把缓存状态设置为头部信息,响应给客户端

            proxy_pass http://cache_server;    
        	#设置代理转发的后端服务器的协议和地址
        }
   }
   
   
   
   
   

 
   
   
server {
    listen 80;
    server_name www.ggl.com;
    
##做静态页面访问    
    location / {
		proxy_cache my_cache;
        proxy_cache_valid 200 5m;
        proxy_cache_key $request_uri;
        add_header Nginx-Cache-Status $upstream_cache_status;
        proxy_pass http://cache_server;      	
   }
   

##做动态页面访问配置
   location .*\.jsp$ {     
	proxy_pass http://tomcat_server;      	
   }
   
   
}   

取消不需要内容的缓存

  • 对于一些实时性要求非常高的页面或数据来说,就不应该去设置缓存
vim /etc/nginx/nginx.conf

http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m 
max_size=10g 
inactive=60m
use_temp_path=off;


##创建缓存需要的文件夹
mkdir -p /data/nginx/cache
vim /etc/nginx/conf.d/default.conf


server {
  listen 80;
  server_name www.ggl.com;
  
  #URI 中后缀为 .txt 或 .text 的设置变量值为 "no cache"
  if ($request_uri ~ \.(txt|text)$) {
   set $cache_name "no cache"
  }
  
  location / {
    proxy_no_cache $cache_name;      
#判断该变量是否有值,如果有值则不进行缓存,如果没有值则进行缓存

    proxy_cache my_cache;            #设置缓存内存
    
    proxy_cache_valid 200 5m;        
#缓存状态为200的请求,缓存时长为5分钟

    proxy_cache_key $request_uri;    
#缓存文件的key为请求的URI

add_header Nginx-Cache-Status $upstream_cache_status    
#把缓存状态设置为头部信息,响应给客户端

    proxy_pass http://cache_server;  #代理转发
  }
}





server {
  listen 80;
  server_name www.ggl.com;
  
  if ($request_uri ~ \.(txt|text)$) {
   set $cache_name "no cache"
  }
  
  location / {
    proxy_no_cache $cache_name;      
    proxy_cache my_cache;            
    proxy_cache_valid 200 5m;        
    proxy_cache_key $request_uri;   
add_header Nginx-Cache-Status $upstream_cache_status;    
    proxy_pass http://cache_server;  
  }
  
  
}

查看nginx缓存数据

##在网页配置中添加页面

##在ngin   192.168.242.67节点配置
cd /usr/share/nginx/html

echo '<h1>this is 1 web</h1>' > test.html


##在ngin   192.168.242.68节点配置
cd /usr/share/nginx/html

echo '<h1>this is 2 web</h1>' > test.html
nginx -t
systemctl restart nginx
##在另外一台主机或客户端访问192.168.242.69/test
curl 192.168.242.69/test.html


##在nginx缓存服务器192.168.242.69上,查看缓存
cd /data/nginx/cache

##可以看见这个目录下有缓存的目录和文件
cat /data/nginx/cache/c/97/5804fd1475122d946b51ef022d2cb97c

CDN

概念

  • CDN的全称是Content Delivery Network,即内容分发网络。
  • 其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容(就近原则),提高用户访问网站的响应速度。
  • 从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度
  • CDN的工作原理就是将您源站的资源缓存到位于全球各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验

工作原理

在这里插入图片描述

1. 用户输入访问的域名,操作系统向 LocalDns 查询域名的ip地址.
2. LocalDns向 ROOT DNS 查询域名的授权服务器(这里假设LocalDns缓存过期)
3. ROOT DNS将域名授权dns记录回应给 LocalDns
4. LocalDns得到域名的授权dns记录后,继续向域名授权dns查询域名的ip地址
5. 域名授权dns 查询域名记录后(一般是CNAME),回应给 LocalDns
6. LocalDns 得到域名记录后,向智能调度DNS查询域名的ip地址
7. 智能调度DNS 根据一定的算法和策略(比如静态拓扑,容量等),将最适合的CDN节点ip地址回应给 LocalDns
8. LocalDns 将得到的域名ip地址,回应给 用户端
9. 用户得到域名ip地址后,访问站点服务器
10. CDN节点服务器应答请求,将内容返回给客户端.(缓存服务器一方面在本地进行保存,以备以后使用,
		二方面把获取的数据返回给客户端,完成数据服务过程)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4.Nginx缓存设置和CDN 的相关文章

  • 如何设置 Nginx URI 以修复重定向到指定位置中的空 URI

    问题 当使用包含 符号的无效 URL 访问我们的网站时 Nginx 会抛出 400 Bad Request 错误 我们希望将请求重写为 WordPress 404 页面 而不是 Nginx 页面 我已经尝试过以下方法 location 40
  • 如何在 Docker 容器中运行 Nginx 而不停止?

    我在 Docker 容器上安装了 Nginx 并尝试像这样运行它 docker run i t p 80 80 mydockerimage usr sbin nginx 问题是 Nginx 的工作方式是 初始进程立即生成一个 Nginx 主
  • nginx工作进程如何共享“监听套接字”

    This http aosabook org en nginx html http aosabook org en nginx html说 工作进程接受来自共享 监听 套接字的新请求 并在每个进程内执行高效的运行循环 我查看了代码 但不明白
  • ./manage.py 使用 https 运行服务器

    manage py 运行服务器 0 0 0 0 8000 我使用上面的行作为我从 github 借用的代码的一部分 https github com ribeiroit boh puppet https github com ribeiro
  • 上传大文件(几 GB)时,nginx 返回内部服务器错误

    我在 nginx 后面有一个 Artifactory 上传大于 4 GB 的文件失败 我相当确定这是 nginx 的错误 因为如果文件从本地主机上传 上传到本地主机 则不会出现问题 nginx 设置为client max body size
  • Nginx 正在向 uWSGI 发出非常旧的请求?

    我看到一种奇怪的情况 Nginx 或 uwsgi 似乎正在建立一个很长的传入请求队列 并在客户端连接超时后很长时间内尝试处理它们 我想理解并停止这种行为 以下是更多信息 My Setup 我的服务器使用 Nginx 通过 Unix 文件套接
  • nginx - 记录 SSL 握手失败

    我正在运行启用了 SSL 的 nginx 服务器 我的协议 密码设置相当安全 我已经在 ssllabs com 上检查过它们 但是 因为这是一个由我无法控制的 http 客户端调用的 Web 服务 所以我担心兼容性 重点是 有没有办法在我的
  • Nginx 背后的多个 Meteor 站点

    这个问题与this https stackoverflow com questions 10936242 how can i correct the meteor base url in a nginx reverse proxy conf
  • kubernetes 集群中 django 应用程序的 Nginx 配置

    我在为部署在 kubernetes 中的 django 应用程序创建 nginx 配置文件时遇到困难 Nginx 和 app 是同一集群中的两个独立容器 据我了解 容器可以通过 127 0 0 1 XX 和主机名相互通信 我为此使用 min
  • 使用 FastCGI 运行 Lua 脚本

    我目前正在尝试找出使用 FastCGI 与 lighttpd 或 Nginx 一起运行 Lua 脚本的方法 我唯一能挖到的是WSAPI http keplerproject github com wsapi 开普勒计划的一部分 但我想知道是
  • Nginx 中 uwsgi_pass 和 proxy_pass 的区别?

    我在 Nginx 后面运行 uWSGI 并一直在使用proxy pass让 Nginx 访问 uWSGI 切换到有什么好处吗uwsgi pass 如果是这样 那是什么 uwsgi pass使用一个uwsgi协议 proxy pass使用普通
  • nginx docker 容器:502 错误网关响应

    我有一个服务监听 8080 端口 这不是一个容器 然后 我使用官方镜像创建了一个 nginx 容器 docker run name nginx d v root nginx conf etc nginx conf d p 443 443 p
  • WebSockets 监听 UNIX 域套接字?

    是否可以在 nginx 服务器后面设置一个 WebSockets 服务器来处理 UNIX 域套接字上的连接 我目前在同一台计算机上有多个 WebSocket 服务器实例 并且存在端口共享问题 所有实例都必须分配一个唯一的端口 我想避免这种情
  • 将代码从 htaccess 重写为 nginx 配置?

    我在将 htaccess 文件中的重写代码实现到 nginx 配置中时遇到问题 我已经尝试过生成器 http winnginx com htaccess http winginx com htaccess用于生成我的重写 代码 我的ngin
  • 使用nginx容器作为反向代理时的原始url

    我有一个 Web 应用程序部署为码头集装箱 我也有一个nginx容器 使用dnsmasq解析器 设置为充当 Web 应用程序前面的反向代理 它的 80 端口映射到主机 我的应用程序使用 SSO 身份验证 当我使用身份提供商登录时 回调 ur
  • Beanstalk 部署忽略 .ebextensions 中的 nginx 配置文件

    我在单实例 Elastic Beanstalk 环境中托管 Java Web 应用程序 并添加了几个 ebextension 文件 这些文件在每次部署时成功为我创建配置文件 然而 我无法找到一种方法让 Beanstalk 在 etc ngi
  • NGINX 上的 SSL 终止

    我已经购买了 SSL 证书 并在验证模数时正确地将其捆绑在一起 即https kb wisc edu middleware 4064 https kb wisc edu middleware 4064 那么哈希值是相同的 我已将证书和密钥移
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了
  • 使用查询参数值进行 NGINX 301 重定向

    我想重定向example com lang en to example com en 我正在使用 Python Django 我的服务器运行 Plesk Nginx 我尝试像这样在我的网页上重定向 但这是行不通的 rewrite lang

随机推荐

  • 基于matlab实现的水果识别系统设计

    水果识别 摘要 本项目针对多种常见水果混合的图像 利用 Matlab 软件 对水果的识别进行研究 根据水果和背景的差别选取阈值 对去噪增强对比度后的图像进行二值化处理 再对图像进行边缘检测 选定连通区域 标记后再对不同种水果的颜色 形状 大
  • 【机器学习】机器学习实验二:支持向量机(详细代码展示)

    文章目录 一 项目地址 二 实验二的详细代码 一 项目地址 https mbd pub o bread ZJWampxx 二 实验二的详细代码 手动调参
  • Mysql递归查询子级(父子级结构)&从子级ID查询所有父级(及扩展知识)

    文章目录 1 建表及插入数据 2 递归查询子级 包括or不包括自己 递归查询子级sql 可能存在的问题 处理这个存在的问题 可借鉴的扩展参考 重要 mysql根据父节点递归查询所有子节点 根据一个父节点查询所有子节点 包含自身 根据多个父节
  • React 项目怎么引入自定义组件、传递参数到组件

    1 首先需要在使用组件的页面引入自定义组件 src index js 是一个入口文件 我们也可以在这里引用 import React Suspense Component from react 引入自定义组件 import ReactDOM
  • Python番外篇:用Pygame制作一场漂亮的流星雨

    hello 大家好 我是wangzirui32 今天我们来学习如何用Pygame制作一场漂亮的流星雨 开始学习吧 文章目录 前言 1 素材图片 2 项目结构 3 编写代码 3 1 Star类 3 2 主项目demo py 4 效果展示 写在
  • 详解linux下的串口通讯开发

    串行口是计算机一种常用的接口 具有连接线少 通讯简单 得到广泛的使用 常用的串口是RS 232 C接口 又称EIA RS 232 C 它是在1970年由美国电子工业协会 EIA 联合贝尔系统 调制解调器厂家及计算机终端生产厂家共同制定的用于
  • 【UE4】纯蓝图实现数据表(DataTable)的写入存储

    前言 UE4可以方便的实现表格的读取 通常是将csv表格文件按对应表头结构体导入后 作为引擎内的DataTable类型文件再进行使用 读取DataTable的操作 可以通过GetDataTableRowNames和GetDataTableR
  • 简单介绍使用图片 base64 编码的优点和缺点。

    base64 编码是一种图片处理格式 通过特定的算法将图片编码成一长串字符串 在页面上 显示的时候 可以用该字符串来代替图片的 url 属性 使用 base64 的优点是 1 减少一个图片的 HTTP 请求 使用 base64 的缺点是 1
  • 采用定时器指令和比较指令控制多台电动机顺序起动、逆序停止

    实验要求 在一些机械的生产过程中 经常需要到要求多台电动机的起动和停止按照一定的顺序进行 例如 要求三台电动机M1 M2 M3在按下起动开关时电动机顺序启动 起动的顺序为M1 M2 M3 顺序起动时时间的间隔为60秒 启动完毕后电动机正常工
  • Python练习之选择与循环

    目录 1 编写程序 运行后用户输入4位整数作为年份 判断其是否为闰年 提示 如果年份能被400整除 则为闰年 如果年份能被4整除但不能被100整除也为闰年 2 编写程序 用户从键盘输入小于 1000 的整数 对其进行因式分解 例如 10 2
  • 你好,语义分割(二)

    在 你好 语义分割 一 中 我们介绍了语义分割的概念 数据的准备过程和模型设计 并且使用数据加载器对数据进行训练集 验证集和测试集的拆分 接下来 我们使用训练集对模型进行训练 用来学习理想的参数 2 3 训练 Train 2 3 1 学习准
  • 2019中科实数杯( Q1内存镜像取证分析、Q4加密磁盘分析)

    文章目录 题目 Q1 内存取证 Q4 加密容器 题目 Q1 内存取证 Q4 加密容器
  • pppoe路由桥混合模式_为什么宽带账号分路由模式和桥接模式?

    我看了下他人的回答都是说的 猫 是怎么回事 宽带连接相关的和这个问题根本不沾边的 都在说光猫设备与宽带账号的设置 根据我所知道的回答一下这个问题 家庭的光猫大部分由路由模式和桥接模式 无线路由器的WAN接口的连接方式由桥接模式 PPPOE拨
  • Spark原理-SparkSql框架优化策略

    有了SparkCore为什么还要有SparkSql呢 有两大原因 一是SparkCore只能用Api 这就把很多SqlBoy拒之门外 Spark就无法发扬光大了 二是使用Api时用户编写的函数作为一个个闭包被序列化后分发到Executor执
  • kubesphere devops使用

    一 创建项目 1 创建项目 企业管理员切换到相应企业空间 租户 创建项目 k8s集群会创建一个相同名字的namespace 如下图所示管理员创建一个ipaas devops项目 2 创建镜像拉取密钥信息 进入项目如ipaas devops
  • elasticsearch7.0 通过api 分页查询产生的问题

    Result window is too large from size must be less than or equal to 10000 but was 44232 See the scroll api for a more eff
  • 用mapreduce来操作hbase的两点优化

    用mapreduce来操作hbase的两点优化 用MR来对hbase的表数据进行分布式计算 有两点配置可以优化操作 提升性能 它们分别是 1 scan setCacheBlocks false 然后调用下面这句来初始化map任务 Table
  • 《数据挖掘基础》习题一

    7 数据 data 信息 information 和知识 knowledge 是人们认识和利用数据的三个不同阶段 数据挖掘技术是如何把它们有机的结合在一起的 数据是形成知识的源泉 不断的利用知识来获得信息 具体表现如下 客观世界 收集 数据
  • C++程序在debug模式下遇到Run-Time Check Failure #0 - The value of ESP was not properly saved across a functio...

    今天遇到一个Access Violation的crash 只看crash call stack没有找到更多的线索 于是在debug模式下又跑了一遍 遇到了如下的一个debug的错误提示框 这个是什么原因呢 我们来看一个简单的例子来重现这个错
  • 4.Nginx缓存设置和CDN

    文章目录 Nginx缓存设置 设置缓存 取消不需要内容的缓存 查看nginx缓存数据 CDN 概念 工作原理 Nginx缓存设置 设置缓存 在yum配置文件中添加nginx在线源 vim etc yum repos d nginx repo