Apache и NginX. Тюнинг быстродействия.

Обновлено 17 мар. 2023 г.

Apache2 и Nginx тюнинг быстродействия Существует множество вещей, который влияет на скорость загрузки страницы. В этом посте мы расскажем о способах ускорить сайт за счёт верной настройки веб-сервера.

Gzip сжатие и кеширование снижают объём передаваемых данных с 3.3 Mb до 1.94 Mb. Сжатый HTML главной страницы весит 141.71 Kb в отличие от 939.99 Kb.

Gzip сжатие

Gzip сжатие — это процесс уменьшение размера файла с помощью специальных алгоритмов. Перед передачей файла пользователю ваш сервер архивирует его, ускоряя тем самым его передачу. Затем браузер  восстанавливает и использует полученный файл. Этот процесс даёт большой выигрыш в скорости работы сайта. Существуют разные уровни сжатия. Чем он выше, тем больше времени требуется на процедуру архивации.

Для статических файлов, таких как JavaScript и CSS, вы можете настроить использование предварительно сжатых данных. Для этого вам понадобится настроить модуль ngx_http_gzip_static_module. Веб-сервер будет искать запрашиваемый файл, но с окончанием .gz. Если он найдёт такой, то отправит пользователю именно его. Например, на вашем сервере есть файл /var/www/your-site/main.js. Вы можете сами создать его сжатую копию /var/www/your-site/main.js.gz и nGinx отправит именно его.

Кеширование

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

Кеширование SSL сессий

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

Конфигурация Apache

Вам нужно включить следующие модули mod_expires, mod_deflate и mod_headers. Сделать это вы можете этой командой:

sudo a2enmod expires;
sudo a2enmod deflate;
sudo a2enmod headers;
sudo service apache2 restart; #Перезапустить Apache

Затем добавьте настройки в файл конфигурации виртуального хоста:

<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/html
 AddOutputFilterByType DEFLATE text/css
 AddOutputFilterByType DEFLATE text/javascript
 AddOutputFilterByType DEFLATE text/xml
 AddOutputFilterByType DEFLATE text/plain
 AddOutputFilterByType DEFLATE image/x-icon
 AddOutputFilterByType DEFLATE image/svg+xml
 AddOutputFilterByType DEFLATE application/json
 AddOutputFilterByType DEFLATE application/rss+xml
 AddOutputFilterByType DEFLATE application/javascript
 AddOutputFilterByType DEFLATE application/x-javascript
 AddOutputFilterByType DEFLATE application/xml
 AddOutputFilterByType DEFLATE application/xhtml+xml
 AddOutputFilterByType DEFLATE application/x-font
 AddOutputFilterByType DEFLATE application/x-font-truetype
 AddOutputFilterByType DEFLATE application/x-font-ttf
 AddOutputFilterByType DEFLATE application/x-font-otf
 AddOutputFilterByType DEFLATE application/x-font-opentype
 AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
 AddOutputFilterByType DEFLATE font/ttf
 AddOutputFilterByType DEFLATE font/otf
 AddOutputFilterByType DEFLATE font/woff
 AddOutputFilterByType DEFLATE font/woff2
 AddOutputFilterByType DEFLATE font/opentype
</IfModule>
AddType application/vnd.ms-fontobject .eot
AddType font/ttf .ttf
AddType font/otf .otf
AddType font/woff .woff
AddType font/woff2 .woff2
AddType image/svg+xml .svg
AddType image/webp .webp
<IfModule mod_expires.c>
 ExpiresActive On ExpiresDefault "access plus 5 seconds"
 ExpiresByType image/x-icon "access plus 1 week"
 ExpiresByType image/jpeg "access plus 1 week"
 ExpiresByType image/png "access plus 1 week"
 ExpiresByType image/gif "access plus 1 week"
 ExpiresByType image/webp "access plus 1 week"

 ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
 ExpiresByType font/ttf "access plus 1 year"
 ExpiresByType font/otf "access plus 1 year"
 ExpiresByType font/woff "access plus 1 year"
 ExpiresByType font/woff2 "access plus 1 year"
 ExpiresByType image/svg+xml "access plus 1 year"

 ExpiresByType application/x-shockwave-flash "access plus 1 year"
 ExpiresByType text/css "access plus 1 year"
 ExpiresByType text/javascript "access plus 1 year"
 ExpiresByType application/javascript "access plus 1 year"
 ExpiresByType application/x-javascript "access plus 1 year"
</IfModule>
<IfModule mod_headers.c>
 Header set Cache-Control "public"
</IfModule>
FileETag MTime Size

Конфигурация NginX

Эти настройки нужно указать в настройках виртуального хоста NginX

# Enable gzip
gzip on;
gzip_comp_level 6;
gzip_types image/svg+xml text/plain text/html text/xml text/css text/javascript application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript application/x-font-ttf application/vnd.ms-fontobject font/opentype font/ttf font/eot font/otf;
gzip_disable "MSIE [1-6]\. ";
add_header Strict-Transport-Security "max-age=31536000;
includeSubDomains" always;#Secure header
# Enable etag caching
location ~ \.(manifest|appcache|html|xml|json|rss|atom)$ {
 add_header Strict-Transport-Security "max-age=31536000;
 includeSubDomains " always; #Secure header
 expires -1;
 add_header Cache-Control "public ";
 etag on;
}
# Enable caching for images, icons, video, audio etc
location ~ \.(</code>jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp3|mp4|ogg|ogv|webm|htc|gz|tar|fla|txt|zip|rar|pdf|xml|swf|wav)$ {
 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; #Secure header
 expires 1W;
 add_header Cache-Control "public ";
 etag on;
}
# Enable caching for CSS and Javascript
location ~ \.(css|js|eot|woff2|woff|ttf|otf)$ {
 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;#Secure header
 expires 1y;
 add_header Cache-Control "public ";
 etag on;
}

Если ваш Nginx сервер работает по защищённому соединению, то будет полезным кешировать данные SSL сессии. Это позволит сэкономить время на служебных операциях по установке безопасного соединения. Для этого нужно добавить эти настройки:

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_stapling on;

Всегда делайте резервную копию перед обновлением конфигурационных файлов.

Мы используем cookie. Продолжая пользоваться сайтом, вы соглашаетесь на обработку персональных данных в соответствии с политикой конфиденциальности. Ладушки