Получения рейтинга A+ для домена

В сегодняшней статье рассмотрим конфигурацию Nginx для получения рейтинга A+ на сайте ssllabs.




Начальная конфигурация:




  • Сервер Ubuntu Server 18.04
  • VestaCP – контроль панель
  • Web сервер Nginx v1.17.2
  • DNS сервер bind9
  • PHP v7.4
  • MySQL v5.7




Все сайты конфигурируются через контроль панель VestaCP, поэтому все примеры будут показаны для данной панели, но также вся приведенная конфигурация применима и к обычной конфигурации сервера.




И так начнем:




Настройка сжатия в Nginx




Открываем файл конфигурации nginx




sudo nano /etc/nginx/nginx.conf




И вносим в секцию http следующие строки:




##Compression
gzip                on;
gzip_static         on;
gzip_vary           on;
gzip_comp_level     6;
gzip_min_length     1024;
gzip_buffers        16 8k;
gzip_types          text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-t$
gzip_proxied        any;
gzip_disable        "MSIE [1-6].";




Настройка stapling в Nginx




Для начала создадим файл dhparams.pem:




sudo openssl dhparam -out /home/admin/conf/web/dhparams.pem 4096




путь можете указать свой, но не забудьте тогда поменять его и в конфигурации nginx




Также ускорим проверку сертификата клиентом и увеличим скорость загрузку сайта. Для этого у вас должен быть сертификат SSL. У меня сертификат от letsencrypt, для него и привожу пример. Сертификат получен при помощи certbot установленного в системе.




Давайте добавим в конфигурацию nginx, следующую секцию:




##Stapling Session
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/obu4alka.ru/chain.pem;
resolver 8.8.8.8;
ssl_session_tickets off;
ssl_dhparam /home/admin/conf/web/dhparams.pem;




название сайта и пути пишем свои.




Включаем HSTS в Nginx




В секцию http:




## HSTS Session
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";




Настройка TLSv3 в Nginx




Также вносим в секцию http:




##SSL Session
ssl_session_cache   shared:SSL:10m;
ssl_protocols       TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";




Если необходимо, то можете добавить TLSv1.1 и TLSv1.0 в ssl_protocols




Сгенерировать шрифты можно по адресу SSL Configuration Generator




Включаем SSL и HTTP2 в Nginx




Открываем на редактирование файлы виртуальных хостов. По умолчанию они находятся в директории /etc/nginx/sites-enabled/ваш-сайт.conf




В моем случае пути следующие:




sudo nano /home/admin/conf/web/mysite.nginx.ssl.conf




И вношу изменение:




##было
server {
     listen      80.81.82.83:443 ;
     server_name obu4alka.ru www.obu4alka.ru;




##стало
server {
     listen      80.81.82.83:443 http2 ssl;
     server_name obu4alka.ru www.obu4alka.ru;




Работа с HTTPS устроена таким образом, что если у сервера был запрошен по защищенному протоколу сайт, не имеющий сертификата, либо вообще произошло обращение по IP-адресу, то в ответ будет показан тот защищенный сайт, который находится первым в конфигурации. Во многих случаях такое поведение будет неожиданным для пользователя и его следует избегать. В нашем случае, при запросе узла отличного от указанного в конфиге, сервер оборвет соединение без отправки данных (ошибка 444 в Nginx).




server {
     listen      80.81.82.83:443 http2 ssl;
     server_name obu4alka.ru www.obu4alka.ru;
     if ($host != $server_name) {
        return 444;
     }




Тестирование на получения рейтинга A+




переходим на сайт ssllabs.com – для тестирования и получения рейтинга.




Также можете перейти на сайт hstspreload.org– для внесения сайта в списки HSTS сайтов.



[endtxt]




RSS




2019-08-08T08:00:33
Nginx