В сегодняшней статье рассмотрим конфигурацию 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]