在服务器块中添加防盗链代码后,现在所有图片都无法加载。以下是完整的服务器有问题的 Web 服务器的阻止代码:
server {
listen 443 ssl;
server_name mydomain.com www.mydomain.com 192.168.1.101;
if ($host !~* ^www\.(.*)$) {
return 301 https://www.$host$request_uri;
}
ssl_certificate "G:/Web Sites/MyDomain/certificate/certificate.crt";
ssl_certificate_key "G:/Web Sites/MyDomain/certificate/private.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
charset utf-8;
access_log logs/MyDomain.log main;
root "G:/Web Sites/MyDomain";
index index.php index.php3 index.php4 index.php5 index.html index.htm;
location / {
location = /favicon.ico {
log_not_found off;
access_log off;
}
if ($request_uri ~* ".(ico|css|js|gif|jpe?g|png)$") {
expires 30d;
access_log off;
add_header Pragma public;
add_header Cache-Control "public";
break;
}
}
error_page 404 /; #404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root "G:/Web Sites/MyDomain";
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
#Hotlinking protection.
#location ~* \.(gif|jpe?g|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css)$ {
# valid_referers none blocked mydomain.com *.mydomain.com ~\.google\. ~\.yahoo\. ~\.bing\. ~\.facebook\. ~\.fbcdn\. ~\.twitter\. ~\.pinterest\. ~\.ask\. ~\.wp\.;
# if ($invalid_referer) {
# return 301 https://sites.google.com/site/tcperpetual/home/hotlinked-message.gif;
# }
#}
}
不太确定哪里出了问题,或者我的图片是否有其他引用,但它们都在我的网络服务器上。我的图片被动态加载到 div 中。
答案1
您的问题有一些格式问题,但我可以这样说。请同时定义“不起作用”。您可以打开浏览器的 Web 控制台(使用 F12)并从网络选项卡中查看错误代码。
Nginx 只会从您拥有的多个位置块中选择一个位置块。当您的浏览器请求图像文件时,Nginx 将选择您显示的位置块。如果您的 referrer 有效(取决于 valid_referers 指令),您的块将不会执行任何特殊操作,否则它将返回 403 错误。
如果出现 403,请检查 valid_referers 语法(但看起来正确)。如果出现 404,则可能意味着您有一个位置块,其中/
包含 Nginx 查找网站文件所需的所有指令,但在请求图像时不会使用它,可能如下所示:
server {
location / {
root /var/www;
}
location ~* .(gif|...)$ {
...
}
}
这里,当请求图像时,root
指令不会被解释,所以 Nginx 不知道在哪里寻找文件,因此出现 404。
尝试将 /location 块的内容直接放在服务器块中,这样它实际上会被解释,如下所示:
server {
root /var/www;
location ~* .(gif|...)$ {
...
}
另一个解决方案是从位置块复制一些指令(/
如果您确实需要保留它),如下所示:
server {
location / {
root /var/www;
}
location .(gif|...)$ {
root /var/www;
...
}