Раздача webp картинок в Nginx

webp-ON-OFF
Как то раз когда на одном сайте был превышен лимит канала трафика в 40 Мегабит/с и сайт начал жутко тормозить - я задумался, а что можно сделать да бы сэкономить и не платить больше да ещё чтоб не тормозило?
И я нашел решение - это gzip офлайн.
Но он картинки jpg и png сжимает всего на 1%, а swg сжимает очень хорошо. Я начал искать дальше и наткнулся на альтернативные форматы картинок и среди них был webp формат и я остановился на нём.
Экономия трафика составляет в среднем 26%.

Сначала установим webp.

После этого этим скриптом можно сжимать всё что есть в папке /home/dj-x/dj-x.info/uploads

Рядом с оригинальными картинками png jpg jpeg будут созданы дубликаты в новом формате webp.
file.png
file.png.webp

После того как переконвертировали все картинки нужно ещё добавить немного в конфигурацию Nginx.
Вставляем его выше вашего кеширования.


Всё! Теперь Nginx будет раздавать картинки в формате webp тем браузерам которые его поддерживают - те которые не поддерживают будут грузить jpg и png.
Важно - расширение при этом меняться не будет и ссылки менять не нужно и переадресации тоже не будет - тип файла только будет меняться и размер.
content-type image/webp.

В браузере EDGE есть поддержка webp но для этого нужно скачать с магазина расширение для изображений
Webp Image Extensions.
Но чтобы это работало в EDGE и Firefox нужно вставлять ссылки на картинки так:


Дальше будет продолжение ели ещё что то найду.

Webp конвертер для Windows
Gzip сжатие в Nginx
Подробнее

Nginx запрет закачки файлов без Cookies

Блокировка доступа к файлам без Cookies Stop_Control=1
Заменяет паролирование папок и еще отличный хотлинк.
Данный код открывает очень широкие возможности для разработчиков
при минимальных нагрузках на сервер.

  location ~ "\.mp3$|\.mp4$|\.m4a$|\.zip$|\.rar$|phpinfo.php$" {	
  if ($http_cookie !~* "Stop_Control=1"){
    return 403;
  }
  }


Фильтрация GET запросов.
Разрешить URL только с такими символами, а с другими запретить.
Это поможет защититься от не понятных ссылок.

  if ($request_uri !~ ^(/|/[a-zA-Z0-9\;\.\?/_\-&=%+:]+|/[a-zA-Z0-9\._\-\(\)/]+\.[a-zA-Z0-9\;\.\?/_\-&=%#,\;]+)$) {
  return 444;
  }

Для настройки понадобится расширение EditThisCookie для Chrome.
Пример правил URL Rewrite с регулярными выражениями для IIS 7, IIS 7.5, IIS 8, IIS 8.5, IIS 10.
Подробнее