我在 nginx 1.14.0 和 Ubuntu 18.04 上运行 Ghost。我正在尝试阻止外部站点的图像盗链。
我已经从这篇文章中添加了推荐的代码(以 location ~* .(gif|png|jpe?g)$ 开头)以防止图像盗链。
这是我的站点配置文件:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/example.com/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
location ~* \.(gif|png|jpe?g)$ {
valid_referers none blocked example.com *.example.com;
if ($invalid_referer) {
return 403;
}
}
location ~ /.well-known {
allow all;
}
client_max_body_size 50m;}
问题是当我添加此代码块并重新启动 nginx 时,它可以正常工作并阻止返回 403 Forbidden 错误的外部请求。但是,当我在 Firefox 中使用网络检查器检查请求时,尽管引用者似乎来自https://example.com域,但它也会破坏图像的本地显示。
我尝试将不同的服务器添加到 valid_referers 行:localhost、127.0.0.1、服务器的 ip、https : //example.com/*、http: //example.com/*。然而,无论我如何配置 valid_referers 行,当尝试从本地站点加载图像时,图像仍然被阻止。
当我删除整个热链接阻止块时,本地一切正常,并且图像能够被热链接。
有任何想法吗?这让我快疯了。提前致谢。