如何设置Nginx配置以防止图像直接访问?

时间:2015-12-19 14:22:24

标签: php nginx

我有一个Nginx网络服务器,目前我的网络应用程序托管一些可以公开访问的私人照片,我想在Nginx级别上保护它们。这是我目前的Nginx配置:

...
http {
    ...

    server
    {
        listen      80;
        server_name  dash.mydomain.com;

        index index.html index.htm index.php;
        root  /var/www/myproject-dash;

        location ~ [^/]\.php(/|$) {
          fastcgi_pass    127.0.0.1:9000;
          include         fastcgi_params;
          fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
          fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
        }

        location / {
            rewrite ^/(.*)$ /index.php?$1 last;
        }

        location ~ .*\.(js|gif|jpg|jpeg|...|woff2)$ {
            expires      12h;
        }
    }
}

我似乎应该写一个rewrite规则,我试过这个:

(因为这些文章说:

https://serverfault.com/questions/332631/how-can-i-protect-files-on-my-nginx-server

How to protect against direct access to images?

),所以我写道:

location ~*(\.jpg|\.png|\.gif|\.jpeg)$ {
    rewrite ^/upload/(.+)$ /index.php/myImageRoute/$1 last;
}

但不知怎的,这条规则不起作用。我的真正需要是通过令牌机制进行图像访问,默认情况下禁止直接访问。所以我首先要禁止他们通过Nginx规则直接访问,其次,编写一些PHP代码来实现令牌机制。如果你有令牌,你可以看到图像,如果没有,你就可以看到。

我的示例图片网址是:

/upload/appter/2015/11/1148_3kijfljl344fa.jpg?params1=value1&params2=value2

那么如何才能正确编写这个Nginx规则,将图像直接URL重定向到我的图像处理路径,并将URL作为参数?

0 个答案:

没有答案