nginx 中的热链接保护使我的域名图片消失

nginx 中的热链接保护使我的域名图片消失

在服务器块中添加防盗链代码后,现在所有图片都无法加载。以下是完整的服务器有问题的 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;
    ...
  }

相关内容