Поиск по сайту:

Установите 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. Если у вас есть какие-либо вопросы, отправьте их нам, используя форму для комментариев ниже.