После добавления кода защиты от хотлинкинга в серверный блок ни одно из изображений не загружается. Вот полный сервер блочный код рассматриваемого веб-сервера:
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.
В вашем вопросе есть проблемы с форматированием, но вот что я могу сказать. Пожалуйста, также определите «не работает». Вы можете открыть веб-консоль браузера (с помощью F12) и увидеть код ошибки на вкладке сети.
Nginx выберет только один блок местоположения из многих, которые у вас есть. Когда ваш браузер запрашивает файл изображения, Nginx выберет отображаемый вами блок местоположения. Если ваш реферер действителен (в зависимости от директивы valid_referers), ваш блок не будет делать ничего особенного, иначе он вернет ошибку 403.
Если вы получили 403, проверьте синтаксис valid_referers (он выглядит правильно). Если вы получили 404, это, вероятно, означает, что у вас есть блок местоположения для /
в котором есть все директивы, необходимые Nginx для поиска файлов вашего веб-сайта, но он не используется при запросе изображения, возможно, примерно так:
server {
location / {
root /var/www;
}
location ~* .(gif|...)$ {
...
}
}
Здесь, когда запрашивается изображение, root
директива не интерпретируется, поэтому Nginx не знает, где искать файл, поэтому ошибка 404.
Попробуйте поместить содержимое блока / location непосредственно в блок server, чтобы оно действительно интерпретировалось, например:
server {
root /var/www;
location ~* .(gif|...)$ {
...
}
Другое решение - скопировать некоторые директивы из /
блок местоположения, если вам действительно нужно его сохранить, например:
server {
location / {
root /var/www;
}
location .(gif|...)$ {
root /var/www;
...
}