Установите Nginx с Ngx_Pagespeed (оптимизация скорости) в Debian и Ubuntu.
В нашей последней статье мы показали, как повысить производительность Nginx с помощью Ngx_Pagespeed в CentOS 7. В этом руководстве мы объясним, как установить Nginx с ngx_pagespeed в системах Debian и Ubuntu, чтобы повысить производительность веб-сайтов Nginx.
Nginx [engine x] — это бесплатный популярный HTTP-сервер с открытым исходным кодом, на котором работают многие сайты в Интернете: он хорошо известен своей высокой производительностью и стабильностью. Он также работает как обратный прокси-сервер, общий почтовый и прокси-сервер TCP/UDP, а также может быть развернут в качестве балансировщика нагрузки.
Ngx_pagespeed – это бесплатный модуль Nginx с открытым исходным кодом, предназначенный для повышения скорости работы сайтов, а также сокращения времени загрузки страниц; это значительно сокращает время, необходимое пользователям для просмотра и взаимодействия с контентом на вашем сайте.
Рекомендуется к прочтению: Установите Mod_Pagespeed для повышения производительности сервера Apache.
Возможности Ngx_pagespeed:
- Поддержка HTTPS с контролем URL-адресов.
- Оптимизация изображений: удаление метаданных, динамическое изменение размера, повторное сжатие.
- Минимизация CSS и JavaScript, конкатенация, встраивание и структурирование.
- Встраивание небольших ресурсов.
- Отложена загрузка изображений и JavaScript.
- Переписывание HTML.
- Продление срока службы кэша.
- Позволяет настраивать несколько серверов и многое другое.
Шаг 1. Установка Nginx из исходного кода
1. Чтобы установить Nginx с ngx_pagespeed из исходного кода, в системе необходимо установить следующие пакеты.
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
2. Затем загрузите исходные файлы последней версии Nginx (1.13.2 на момент написания этой статьи) с помощью команды wget и извлеките файлы, как показано ниже.
mkdir -p ~/make_nginx
cd ~/make_nginx
wget -c https://nginx.org/download/nginx-1.13.2.tar.gz
tar -xzvf nginx-1.13.2.tar.gz
3. Затем возьмите исходные файлы ngx_pagespeed и разархивируйте сжатый файл следующим образом.
wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
unzip v1.12.34.2-stable.zip
4. Затем перейдите в разархивированный каталог ngx_pagespeed и загрузите библиотеки оптимизации PageSpeed для компиляции Nginx следующим образом.
cd ngx_pagespeed-1.12.34.2-stable/
wget -c https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
tar -xvzf 1.12.34.2-x64.tar.gz
Шаг 2. Настройте и скомпилируйте Nginx с помощью Ngx_Pagespeed
5. Затем перейдите в каталог nginx-1.13.2 и настройте источник Nginx, используя следующие команды.
cd ~/make_nginx/nginx-1.13.2
./configure --add-module=$HOME/make_nginx/ngx_pagespeed-1.12.34.2-stable/ ${PS_NGX_EXTRA_FLAGS}
6. Затем скомпилируйте и установите Nginx следующим образом.
make
sudo make install
7. После завершения процесса установки выполните приведенные ниже команды, чтобы создать необходимые символические ссылки для Nginx.
sudo ln -s /usr/local/nginx/conf/ /etc/nginx
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
Шаг 3. Создание файла модуля Nginx для SystemD
8. Здесь вам придется вручную создать файл модуля Nginx, поскольку systemd является системой инициализации в новых версиях систем Debian и Ubuntu.
Сначала создайте файл /lib/systemd/system/nginx.service.
sudo vi /lib/systemd/system/nginx.service
Затем загрузите файл службы NGINX systemd и вставьте в него конфигурацию файла модуля.
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Сохраните файл и закройте его.
9. Теперь запустите службу nginx и включите ее запуск при загрузке системы, используя приведенные ниже команды.
sudo systemctl start nginx
sudo systemctl enable nginx
Важно! После запуска службы Nginx вы можете увидеть ошибку, как показано на снимке экрана ниже.
systemd[1]: nginx.service: PID file /run/nginx.pid not readable (yet?) after start: No such file or directory
Чтобы решить эту проблему, откройте файл конфигурации Nginx /etc/nginx/nginx.conf и добавьте следующую строку.
#pid logs/nginx.pid;
to
pid /run/nginx.pid;
Наконец, снова перезапустите службу nginx.
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl status nginx
Шаг 4. Настройте Nginx с модулем Pagespeed
10. Теперь, когда Nginx установлен и работает в вашей системе, вам необходимо включить модуль Ngx_pagespeed. Сначала создайте каталог, в котором модуль будет кэшировать файлы вашего веб-сайта, и установите соответствующие разрешения для этого каталога следующим образом.
sudo mkdir -p /var/ngx_pagespeed_cache
sudo chown -R nobody:nogroup /var/ngx_pagespeed_cache
11. Чтобы включить модуль Ngx_pagespeed, откройте файл конфигурации Nginx.
sudo vi /etc/nginx/nginx.conf
Добавьте следующие строки конфигурации Ngx_pagespeed в блок сервера.
Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
Ensure requests for pagespeed optimized resources go to the pagespeed
handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
Примечание. Если вы развернули на сервере виртуальные хосты nginx, добавьте приведенные выше директивы PageSpeed в каждый блок сервера, чтобы включить Ngx_pagespeed на каждом сайте.
Ниже приведен рабочий пример файла конфигурации Nginx с включенным Ngx_pagespeed на виртуальном хосте по умолчанию.
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
# Pagespeed main settings
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# Ensure requests for pagespeed optimized resources go to the pagespeed
# handler and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
location ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
Сохраните и закройте файл.
12. Затем проверьте, не содержит ли синтаксис файла конфигурации Nginx ошибок, выполнив приведенную ниже команду. Если он верен, вы увидите результат ниже:
sudo nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
13. После этого перезапустите сервер Nginx, чтобы применить последние изменения.
sudo systemctl restart nginx
Шаг 5. Тестирование Nginx с помощью Ngx_pagespeed
14. Теперь проверьте, работает ли Ngx-pagespeed совместно с Nginx, используя приведенную ниже команду cURL.
curl -I -p http://localhost
Если вы не увидели приведенный выше заголовок, вернитесь к шагу 10 и внимательно пройдите инструкции по включению Ngx-pagespeed с помощью последовательных шагов.
Репозиторий Ngx-pagespeed на Github: https://github.com/pagespeed/ngx_pagespeed
Если вы хотите защитить веб-сервер Nginx, мы предлагаем прочитать это полезное руководство: Полное руководство по защите, усилению защиты и повышению производительности Nginx.
Вот и все! В этом уроке мы объяснили, как установить Nginx с ngx_pagespeed в Debian и Ubuntu. Если у вас есть какие-либо вопросы, отправьте их нам, используя форму для комментариев ниже.