Для сайтов и их разделов с редко изменяемым контентом, а также для .css и .js файлов есть решение, позволяющее уменьшить и трафик, и нагрузку на сервер. Надо каждый такой статический файл упаковать в .gz (и получившийся файл положить в тот же каталог, где лежит оригинал), а в .htaccess в корне сайта добавить такие строки:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Accept-encoding} gzip RewriteCond %{REQUEST_FILENAME}\.gz -s RewriteRule ^(.*)\.(html|css|js) $1\.$2\.gz [QSA] # Prevent double gzip and give the correct mime-type RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1,E=FORCE_GZIP] RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1,E=FORCE_GZIP] RewriteRule \.html\.gz$ - [T=text/html,E=no-gzip:1,E=FORCE_GZIP] Header set Content-Encoding gzip env=FORCE_GZIP </IfModule>
Для каждого файла формата .jpg или .png создаётся файл .webp а в .htaccess в корне сайта добавляем такие строки:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Accept} image/webp RewriteCond %{REQUEST_FILENAME}\.webp -s RewriteRule ^(.*)\.([pP][nN][gG]|[jJ][pP][eE]?[gG]) $1\.$2\.webp [QSA] # Prevent double webp and give the correct mime-type RewriteRule \.[pP][nN][gG]\.webp$ - [T=image/webp] RewriteRule \.[jJ][pP][gG]\.webp$ - [T=image/webp] RewriteRule \.[jJ][pP][eE][gG]\.webp$ - [T=image/webp] </IfModule>
#!/usr/local/bin/bash WebpFix1File(){ [ -z "$1" ] && return [ -s "$1" ] || return [ -s "$1.webp" ] && echo -ne "\r- $progress" [ -s "$1.webp" ] && return progress=${1:0:60} len=${#progress} progress="${progress} " progress=${progress:0:60} cwebp -q 85 -quiet -exact -o "$1.webp" -- "$1" >/dev/null 2>&1 [ -s "$1.webp" ] || echo -ne "\r# $progress cannot be converted\n" [ -s "$1.webp" ] || return size_orig=`stat -f "%z" -- "$1"` size_webp=`stat -f "%z" -- "$1.webp"` owners=`stat -f "%u:%g" -- "$1"` rights=`stat -f "%p" -- "$1"` rights=${rights:3:3} if [ "$size_webp" -ge "$size_orig" ] then rm "$1.webp" echo -ne "\r= $progress" else echo -ne "\r+ $progress" chown $owners "$1.webp" chmod $rights "$1.webp" fi } WebpFix1Dir(){ progress=`pwd` progress=${progress:0:60} len=${#progress} progress="${progress} " progress=${progress:0:60} echo -ne "\r${progress}" for i in *.png *.PNG *.Png *.PNg *.pNg *.pNG *.pnG *.PnG do [ -s "$i" ] || continue WebpFix1File "$i" done for i in *.jpg *.JPG *.Jpg *.JPg *.jPg *.jPG *.jpG *.JpG do [ -s "$i" ] || continue WebpFix1File "$i" done for i in *.jpeg *.JPeG *.Jpeg *.JPeg *.jPeg *.jPeG *.jpeG *.JpeG do [ -s "$i" ] || continue WebpFix1File "$i" done for i in *.jpEg *.JPEG *.JpEg *.JPEg *.jPEg *.jPEG *.jpEG *.JpEG do [ -s "$i" ] || continue WebpFix1File "$i" done for j in * do [ -d "$j" ] || continue cd -- "$j" WebpFix1Dir cd .. done } WebpFix1Dir for j in * do [ -d "$j" ] || continue cd -- "$j" WebpFix1Dir cd .. done echo " "
map $http_accept $webpsupport { default 0; "~*image/webp,*/*" "1"; }А в virtual host'ы nginx - location такого вида, чтобы при наличии .webp файла И поддержке его браусером отдавался .webp файл, а при невыполнении любого из этих двух условий - оригинальный файл:
location ~* \.([jJ][pP][eE]?[gG]|[pP][nN][gG])$ { expires max; add_header Pragma public; add_header Cache-Control "max-age=31536000, public"; set $dorewrite 0; if (-f $request_filename.webp) { set $dorewrite $webpsupport ; } if ($dorewrite) { rewrite ^(.*)\.([jJ][pP][eE]?[gG]|[pP][nN][gG]) $1.$2.webp last; } }
Вы выложили на свой сайт, находящийся на нашем сервере, свои картинки. А потом кто-то на совсем другой странице нарисовал на них ссылку, но не указал, нехороший человек, ссылку на Вас. Тем самым он украл у Вас не сами картинки (понятно, что он мог скачать их себе и положить к себе на сайт). Он украл у нас и у Вас траффик - картинки показал на своём сайте со своего сервера, а сервер нагрузил - наш.
Если Вы заинтересованы в том, чтобы такого не происходило, можете использовать вот такой набор директив в .htaccess:
<IfModule mod_access_referer.c> order_referer deny_referer,allow_referer allow_referer from gfns.net deny_referer from all ErrorDocument 403 http://gfns.net/banners/default.gif </IfModule>
Естественно, вместо gfns.net укажите своё доменное имя.
File /home/www/servers/domain/passwd1 may be created with utility htpasswd.exe