Опять делаю SSL A-класса. Теперь на Nginx

Резал пуделя, когда был на говнохостинге от Битвеб. Тогда это был патч для апатч.

ssltestaСейчас, на Sinaro, сервер работает в связке Apache+Nginx и пришлось в общем-то тоже самое (отключать SSL3 и запрещать слабые алгоритмы шифрования) делать в конфиге Nginx (/etc/nginx/nginx.conf):

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
ssl_prefer_server_ciphers on;

Потом рестарт и всё пучком.

service nginx restart

Серт брал у китайского WoSign. C дешёвого GoGetSSL переключилось всё хорошо. Работает. 🙂

 

Частичный редирект http -> https в Nginx

Отломалась активация софта.

Вскрытие показало, что проблема в редиректе http->https, сделаному средствами Nginx:

listen 185.48.58.35:80;
return 301 https://$host$request_uri;

В браузере всё пучком, а из программы ключ активации запрашивается по http, идёт редирект и ответа она уже не видит.

Решение очевидно в общем-то – закрыл редирект в условие:

listen 185.48.58.35:80;
if ($request_uri !~ “^/diracti”)
{
return 301 https://$host$request_uri;
}

То есть редиректим всё, кроме того в чьём URI есть нужная папка (тут это / diracti)

Рестарт Nginx: service nginx restart и всё, как надо.

Google PageSpeed Insights : Включите сжатие

Суть в сокращении объёма передаваемых данных. Сервер пакует их в ZIP, а браузер распаковывает и отображает.

Проверить включено ли сжатие на сервере можно здесь, например. У меня оно было отключено.

Я для сжатия использовал модуль mod_deflate. Существует еще и mod_gzip.

Опять полез в конфиг Апача и прописал такую конструкцию:

<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript application/rss+xml
</IfModule>

То есть проверяем, если модуль активен, то пускай пакует данные указанных типов.

Рестарт Апача (service httpd restart) и бинго – PageSpeed Insights отсыпал кучку поинтов. 🙂

UPD: Я ж теперь на Sinaro.Host (да-да, БитВеб оказался полным говном) и у меня тут зоопарк из вебсерверов (так было и на Форнексе). За статику отвечает Nginx. Для него нужны свои директивы на сжатие (конфиг по вдресу /etc/nginx/nginx.conf) и свой рестарт (service nginx restart):

gzip on;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;

Google PageSpeed Insights : Оптимизируйте код JavaScript и CSS

Продолжаю собирать монетки. Было 77/100. Станет 95/100. 😉

“Удалите из верхней части страницы код JavaScript и CSS, блокирующий отображение,” – говорит нам Гугль.

Ерунда какая!

Сам же гугль хочет responsible design видеть. А он строится на собственных стилях шаблонов и стилях фрэймворков (в моём шаблоне это Bootstrap).

Если все стили оптом отправить в ссылку к </body>, то плывёт отображение страницы.

Решение в исходнике самого Google:

#стилиоднойстрокойТо есть я тупо запилил все критические стили в строку и прописал их явно в хидер шаблона. 150Kb текста в шаблоне выглядят дико, но монетки от PageSpeed Insights я получил – 95/100.

Для минимизации и обратного форматирования .css использовал Dan’s Tools. Там, кстати, много нужных штук.

Да, а все JavaScripts, второстепенные CSS и линки на GoogleFonts были сосланы в низ страницы, к закрывающему тегу.

Работает.

UPD: Минимайзер Дэна жмёт не максимально, как оказалось. Вот этот пакует лучше.

Google PageSpeed Insights : Используйте кеш браузера

Прогибаемся под рекомендации Большого Брата 😉

Для сервера на Apache есть два метода, за каждый из которых отвечает свой модуль – mod_headers или mod_expires. Я использовал mod_headers.

По совету отсюда, прописал в .htaccess конструкцию:

<ifModule mod_headers.c>
<FilesMatch “\.(js|css|txt)$”>
Header set Cache-Control “max-age=604800” #храним неделю
</FilesMatch>
<FilesMatch “\.(flv|swf|ico|gif|jpg|jpeg|png)$”>
Header set Cache-Control “max-age=2592000” #храним месяц
</FilesMatch>
<FilesMatch “\.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control #запрещаем кэширование
</FilesMatch>
</IfModule>

Прописал, а оно – чик и не работает. 😉

Оказалось, что сам модуль на сервере не установлен. Установил mod_headres и перезапустил Apache, как рекомендовано здесь:

1. a2enmod headers – включил модуль

2. service apache2 restart – перезапустил службу Apache

Удовлетворённость PageSpeed Insights для мобильника сайтом составила 77/100

Оптимизирую дальше

UPD: “А какого править .htaccess для каждого сайта-то?” – подумал я и запузырил конструкцию <IfModule mod_headers.c> в конфиг файл самого апача. Перезапустил его и все сайты сервера отправляют одинаковые директивы.

Обновись до Windows 10 бесплатно

Про скорый выход Windows 10 конечно же слышал. Новость, что 29 июля нас ждёт новый триумф Microsoft Windows из всех утюгов льётся.

Было как-то всё равно.

А тут вчера – Чик! и иконка загорелась в TaskBar’е – Get Windows 10. Кликнул и вижу:

Get Windows 10 free

Зарезервировал, жду 🙂

Windows 10 reserved

И подслушанная мысль про бесплатный апгрейд до новой версии.

Суть в том, что шаг-то вынужденный. Времена поменялись. Приходится искать другие варианты монетизации. Тупо “продажа Windows” уже не катит. Apple и Google отгрызают рынок и приучают пользователя хотеть фришных решений, недорогих лицензий и копеешных платежей за сервисы.

Оно видно и по продажам наших паролеломалок – покупает народ всё со скрипом и жалобами, что ценник у нас ломовой. 😉

Учим Apache правильно отдавать файлы с неизвестным расширением

Наши радужные таблицы для расшифровки Excel, Word и PDF, являясь по сути бинарным потоком данных имеют неизвестное для Apache расширение (.prt) и, как результат, сервер неверно определяет их тип данных:

Content-Type: text/plain

То есть Apache сообщает браузеру, что это текстовый документ и браузер вместо того, чтобы предложить сохранение файла начинает открывать нашу выскокотехнологичную абракадабру, как веб-страницу.

Фу-фу-фу!

Решение – явное указание типа данных для файлов с нужным расширением в .htaccess:

AddType “application/octet-stream” .prt

Теперь при переходе по ссылке на файл таблицы появляется окно с предложением сохранить “octet-stream” на диск.

mime-type

Локализация интерфейса Wix-установщика

Делал немецкому ComputerBild кастомную версию дистрибутива. Заодно поменял и язык интерфейса установщика. Делается через добавление директивы -cultures и указание нужной языковой пары в .wxs файле сценария:

lightArgs: -ext WixUIExtension -cultures:de-de

Языковые пары для WixUI и подробности применения.

Но локализация оказалась странная – на немецком оказался не весь интерфейс:

Wix. Не все тут на немецком. А должно бы...

Антиспам, я не спам!

Суть проблемы: отправленные письма возвращаются с 554-ой ошибкой (“Email Error – 554 Message not allowed…”). Это принимающие сервера раскручивают цепочку отправителя, то есть меня, видят несоответствия и отказываются принимать письмо.

Настроил, что надо и проверил рейтинг здесь и получил 9/10. Альтернативная мерялка.

Что делал на примере @denglad.com.

Шаг первый. Прописал все доверенные IP, которые участвуют при оправке письма в SPF записи. У меня получилось так:

v=spf1 ip4:5.196.198.20 a mx ip4:151.80.168.26 ~all

Где 151.80.168.26 – IP с которого уходит письмо, а 5.196.198.20- IP на котором расположен сам почтовый сервер для denglad.com.

То есть принимающий сервер видит в записи, что оба IP являются доверенными и ставит зелёный флажок.

Да, тут надо еще вот что отметить…

Так сложилось, что я шлю свои письма не “из России”. То есть до сервера за бугром проброшен тоннель, письма идут на сервак и с него уходят адресатам. Так что IP отправителя значится как 151.80.168.26, а не питерский AvangardDSL или мобильный МТС. 🙂

А делал я так давно, когда бытовало мнение, что нечего шароварщику, желающему захватить покорить мир, светить своими российскими айпи в заголовках писем.

А теперь уж просто по привычке – должно быть.

Шаг второй. Связал в PTR записи свой IP и mail-сервер от имени которого уходят письма, что бы при обратном запросе по IP всплывало имя сервака, отправившего письмо.

То есть при запросе host mail.denglad.com я должен видеть

mail.denglad.com has address 5.196.198.20

А при ответном запросе host 5.196.198.20 должно приехать

*someIP4*.in-addr.arpa domain name pointer mail.denglad.com

У бывшего хостера пару IP<->mailserver можно было самостоятельно связать из контрольной панели. В случае с БитВеб пришлось писать в саппорт. Добавили оперативно.

Да, PTR запись, которую можно прописать для своего домена в разделе контрольных записей (A-/MX-/и т.д.) решением проблемы не является. Для чего она там для меня осталось загадкой.

В общем эти два простых действия привели к отличному рейтингу писем и возвратов писем от серверов получателей я больше не получаю.

Осталось разобраться с цифровой подписью и получить 10/10 рейтинг.

Как попасть в выдачу Гугля за 30 минут?

Элементарно!

В панели Google Webmaster Tools у нужного сайта в разделе Сканирование -> Просмотреть как Googlebot ввести адрес новой страницы и жамкнуть Добавить в индекс.

Войля: не прошло и часу – страница уже там 😉