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

今天我们开始学习nginx缓存功能,CORS以及nginx防盗链

缓存功能


反向代理可以缓存静态资源

作为代理端配置能够缓存的静态页面

其中的核心配置如下:

#http  语句

proxy_cache_path  /data/nginx/proyxcache   levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;
#1:1:1  16个二进制     2^16/2^16/2^16       2^48


server {
   listen 80;
   proxy_cache proxycache;
   proxy_cache_key $request_uri;
   #proxy_cache_key $host$uri$is_args$args;
   proxy_cache_valid 200 302 301 10m;
   #proxy_cache_valid any 5m;
   server_name www.kgc.com;
   root /data/nginx/pc;

proxy_cache zone_name on | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义

proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;

proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中
 示例:
 proxy_cache_valid 200 302 10m;
 proxy_cache_valid 404 1m; #会产生访问时间差

proxy_cache_path;
#定义当前存放缓存的位置,必须放在http语句中

#示例:在http配置定义缓存信息
   proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建,这里一般指定有效目录
   levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录
   keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的key。
   inactive=120s  #缓存有效时间  
   max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值

默认情况,磁盘空间越大能创建的目录就越多

#示例:在http配置定义缓存信息
   proxy_cache_path /var/cache/nginx/proxy_cache (真正生产环境这个目录是不会放在缓存里的)#定义缓存保存路径,proxy_cache会自动创建
   levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录
   keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的key
   inactive=120s  #缓存有效时间  
   max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值

#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #uri是服务器在本地进行记录资源位置的一种方式#对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端

#示例
proxy_cache_use_stale error http_502 http_503;


proxy_cache_methods GET | HEAD | POST ...;#GET提交运用于不需要安全的场合它所传的参数是能被看见的

#而POST提交是需要非常安全的场合(例如登录页面)
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存

Nginx配置跨域 CORS

跨域的定义

​ 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。通常不允许不同源间的读操作。

同源的定义

如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。

与 URL http://store.company.com/dir/page.html 的源进行对比的示例:

  • http://store.company.com/dir2/other.html 同源

  • https://store.company.com/secure.html 不同源,协议不同

  • http://store.company.com:81/dir/etc.html 不同源,端口不同

  • http://news.company.com/dir/other.html 不同源,主机不同

不同源的限制

  • Web 数据层面,同源策略限制了不同源的站点读取当前站点的 Cookie 、 IndexDB 、 LocalStorage 等数据;

  • DOM 层面,同源策略限制了来自不同源的 JavaScript 脚本对当前 DOM 对象读和写的操作;

  • 网络层面,同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。

Nginx 解决跨域的原理

浏览器的同源策略限制了跨域请求,但当使用 Nginx 作为代理服务器时,浏览器发送的请求实际上是发送到与前端页面同源的 Nginx 服务器。然后 Nginx 将请求转发到真正的目标服务器,目标服务器返回的响应再通过 Nginx 返回给浏览器。从浏览器的角度看,它只与同源的 Nginx 服务器进行交互,从而绕过了 CORS 限制

记住nginx能解决不同源的问题,可以实现同源策略访问。

Nginx防盗链设置


什么是盗链

盗链指的是例如:在百度网站上有好多资源,某某也建了一个网站,但是某某不喜欢收集资源,现在网站就是一个空壳,把所有访问某某网站上的资源都调用百度的。这个过程就叫盗链过程。盗用的都是前段资源,比如:图片、音频、视频......

配置防盗链案例

为了模拟盗链,让192.168.100.1为网站服务站点,192.168.100.2访问192.168.100.1进行盗链。

修改Nginx的字符集以支持中文:

charset utf-8;

修改 192.168.100.2 Nginx 默认访问文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>产生盗链</title>
</head>
<body>
 <a href='http://192.168.100.2/photos/1.png'>站点</a>
</body>
</html>

此时在浏览器输入192.168.100.2,可以正常访问192.168.100.1站点的图片资源。

如果不想被盗链,则对192.168.100.1站点服务修改Nginx配置文件,防盗链的配置可以在任意的 location 模块下设置,不能在 server 下,不想让别人盗链哪个资源就在那个资源的 location 模块下设置防盗链。

防盗链设置格式:

valid_referers none | blocked | server_names | strings ....;
  • --none:允许没有http_refer的请求访问资源,检测 Referer 头域不存在的情况,则可以访问。

  • --blocked:检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。允许不是http://开头的,不带协议的请求访问资源。

  • --server_names :只允许指定ip/域名来的请求访问资源(白名单)。可设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。在生产环境中尽量使用域名,不使用ip。

192.168.100.1设置防盗链

​
server {listen 80;server_name localhost;location / {root   /usr/local/nginx1273/html;index  index.html index.htm;}location ~* \.(js|img|css|png)${valid_referers 192.168.100.1; #只允许192.168.100.1访问静态资源,其他人访问则会返回403if ($invalid_referer){return 403;}root html;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location =/50x.html {root html;}
}

http://www.dtcms.com/a/405825.html

相关文章:

  • 前端缓存好还是后端缓存好?缓存方案实例直接用
  • 小九源码-springboot050-基于spring boot的苏蔚家校互联管理系统
  • 陕西西安网站建设公司大学生网页设计
  • Redis 面试常考问题(高频核心版)
  • 开发时如何彻底禁用浏览器表单自动填充缓存
  • 零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二)
  • 【项目实战 Day7】springboot + vue 苍穹外卖系统(微信小程序 + 微信登录模块 完结)
  • python+springboot+uniapp基于微信小程序的停车场管理系统 弹窗提示和车牌识别
  • -bash: ssh-copy-id: command not found的两种解决方法
  • 电商网站新闻怎么做即速应用小程序官网
  • 上海网站建设接单互联网+大学生创新创业项目官网
  • 我是如何用Claude Code打造通用AI Agent的
  • 使用Nexus Repository Manager搭建私有自建 pip 源
  • 9.二叉树(上)
  • DNS 服务器与 DHCP 服务器详解及配置指南
  • 中国建设银行官网站招聘频道如何不花钱做网站
  • 恢复快照(需先暂停 / 关闭虚拟机,避免数据不一致)
  • 九、OpenCV中视频的录制
  • ASP.NET网站建设实战企业网页模板图片
  • 分布式机器人多机协同巡检系统设计
  • 滑动窗口题目:统计「优美子数组」
  • list 迭代器:C++ 容器封装的 “行为统一” 艺术
  • 专题:2025年AI Agent智能体行业洞察报告|附110+份报告PDF、数据仪表盘汇总下载
  • docker部署使用
  • 信息安全基础知识:05物理与环境安全
  • 【双机位A卷】华为OD笔试之【队列】双机位A-篮球游戏【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 考研复习-线性代数-第二章-矩阵
  • wordpress主题样式表绵阳做seo网站公司
  • Answer+cpolar:企业知识共享的远程协作方案
  • 在SSL证书是有效的前提下,依旧显示“资源不安全