关于php:加密访问资源方法总结

3次阅读

共计 1092 个字符,预计需要花费 3 分钟才能阅读完成。

在有些状况下咱们须要对咱们服务器上的资源进行加密拜访,那么咱们须要如何来实现呢?

1. 批改 nginx 配置

  • 批改 nginx 配置,将须要加密拜访的资源设置为禁止内部拜访

    # 资源实在存储门路 /upload 禁止内部间接拜访
    location ^~ /upload {internal;}

  • 设置拜访不存在资源时,跳转到指定的 php 脚本进行解析

    # 如果文件不存在, 则 rewrite 到 PHP 脚本文件进行解决
    if (!-f $request_filename) {rewrite ^/.*$ /attachment.php;}

  • 依据如上配置 nginx 实现资源加密拜访实例

    # 图片实在存储门路 /upload 禁止内部间接拜访
    location ^~ /upload/school {internal;}
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
      # 如果文件不存在, 则 rewrite 到 PHP 脚本文件进行解决
      if (!-f $request_filename) {rewrite ^/.*$ /attachment.php;}
      expires      30d;
      error_log /dev/null;
      access_log /dev/null; 
    }

    2. attachment.php(资源解析脚本)

    <?php
    // key 参数为校验参数,有该参数即可通过验证,否则不通过
    if (!isset($_GET['key'])) {exit('get img failed!');
    }
    //key 验证逻辑
    
    $imagePath = $_SERVER['DOCUMENT_ROOT'] . '/upload/';
    $image = $_SERVER['REQUEST_URI'];
    // 拼接图片实在全门路
    $fullPath = $imagePath . $image;
    // 获取图片 mime 信息 设置 Content-type 头
    $mime = getimagesize($fullPath)['mime'];
    header("Content-Type: $mime");
    // 设置 sendfile 头部,让 nginx 跳转到 download 下查找对应图片 相当于交给 nginx 进行后续解决
    header("X-Accel-Redirect: /upload/$image");
    die;

  • 依据如上就能够实现资源秘密拜访,最总实现成果如下 (站点域名为:www.test.com)
    — 例如资源实在地址为:/upload/test.jpg
    — 拜访 www.test.com/upload/test.jpg 失败
    — 拜访 www.test.com/test.jpg 失败
    — 拜访 www.test.com/test.jpg?key=XXX 胜利
正文完
 0