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

Nginx+PHP+CI框架实现,访问静态文件带权限验证

1、访问来源验证配置nginx

#文件访问来源校验 如路径:https://ys.test.com/test/api/uploads/test.png
#不是该允许域名的将返回403页面
location /test/api/uploads/ {valid_referers ys.test.com ys.test2.com;if ($invalid_referer) {return 403;}
}

2、拦截访问文件url交由后端内部判断是否有访问权限

nginx配置

#拦截文件访问url地址 如:https://ys.test.com/test/api/uploads/test.png
location /test/api/uploads/ {#开启只允许内部访问internal;error_page 404 =200 @backend;
}#内部php校验地址
location @backend {#进行访问地址重定向  # https://ys.test.com/test/api/uploads/test.png # -> # https://ys.test.com/test/api/down_auth/down/test.pngrewrite ^/test/api/uploads/(.*)$ /test/api/down_auth/down/$1 break;proxy_pass https://ys.yuhoutech.com;proxy_redirect   off;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

php后端

<?php if (!defined('BASEPATH'))exit('No direct script access allowed');/*** 文件浏览权限判断*/
class Down_auth extends MY_Controller
{public function __construct(){parent::__construct();}/*** @Notes: 校验权限* @Function down*/public function down(){// 验证用户是否登陆 没登陆则返回获取文件失败$user_info = $this->session->userdata("user_info");if (empty($user_info)) {exit('get file failed!');}$base_dir = '/test/api/uploads/';// 图片真实存放路径$imagePath = $_SERVER['DOCUMENT_ROOT'] . $base_dir;// 获取url中的图片名 如 http://localhost/test/api/uploads/test.jpg 获取值为test.jpg$explode = explode("/", parse_url($_SERVER['REQUEST_URI'])['path']);$image = $explode[count($explode) - 1];// 拼接图片真实全路径 如 /var/www/test/api/uploads/test.jpg$fullPath = $imagePath . $image;//判断文件是否存在if (!file_exists($fullPath)) {exit('file 404 ');}// 获取图片mime信息 设置Content-type头$mime = getimagesize($fullPath)['mime'];header("Content-Type: $mime");// 设置sendfile头部,让nginx跳转到download下查找对应图片 相当于交给nginx进行后续处理header("X-Accel-Redirect: $base_dir/$image");}}

参考地址:
nginx静态文件权限控制-防盗链-CSDN博客

 基于Nginx+PHP实现的带权限验证的静态文件服务器

springMvc+nginx文件鉴权(校验权限)服务器

 

http://www.lryc.cn/news/411554.html

相关文章:

  • javascript 第二天
  • unity2D游戏开发17战斗精灵
  • kafka架构+原理+源码
  • 实力共鉴!微风企斩获2024年浙江省专精特新中小企业
  • C#:枚举及位标志周边知识详解(小白入门)
  • 这本vue3编译原理开源电子书,初中级前端竟然都能看懂
  • 小白如何安装WNO(小波神经算子),需要安装python3.8,torch,ptwt,pywt等
  • Java HashMap 源码解读笔记(一)--xunznux
  • “等保测评下的数据加密与隐私保护“
  • Oat++ 后端实现跨域
  • Three basic starting points to do AI
  • 等保测评练习卷22
  • Linux用户-普通用户
  • 世界顶级思想家颜廷利:生命的升华,人类与动物的进化之道
  • 团队心脏:项目比赛中激发团队潜力的策略与技巧
  • Qt安卓开发的一些概念
  • 语音交互、AI问答,等你来体验!
  • 深度对比分析python和RPA,为什么会python了,还要用RPA?
  • el-table支持行拖动
  • git拉取项目并切换到某个tag
  • 数据结构之探索“堆”的奥秘
  • 光影漫游者:高科技球形场馆开启沉浸式体验新时代—轻空间
  • 面试题007:static修饰符可以修饰什么,static的重要规则
  • EasyTwin的动画系统已经到了next level?快来一探究竟!
  • 当业务开展遇到阻力,如何开展?
  • 萨科微半导体整流桥
  • STM32的GPIO输入输出方式设置示例
  • SQL插入、更新和删除数据
  • 如何将幻灯片中的图片背景设置为透明
  • 【雅思考试】-- Day2 - 单词