我有一个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¶ms2=value2
那么如何才能正确编写这个Nginx规则,将图像直接URL重定向到我的图像处理路径,并将URL作为参数?