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