Ускорьте производительность Nginx с помощью Ngx_Pagespeed в CentOS 7
Nginx [engine x] — это бесплатный кроссплатформенный мощный веб-сервер и программное обеспечение обратного прокси с открытым исходным кодом, написанное на C. Это также стандартный прокси-сервер IMAP/POP3 и TCP/UDP. и может использоваться как балансировщик нагрузки.
Nginx — это хорошо известный HTTP-сервер (сравнимый с HTTP-сервером Apache), обеспечивающий работу множества сайтов в Интернете; он популярен благодаря своей высокой производительности и стабильности.
Если вы хотите улучшить взаимодействие с пользователем на своем сайте, следует учитывать различные важные факторы, включая скорость сайта и скорость страницы (также известную как время загрузки страницы). Если ваш сайт работает на Nginx, вы можете использовать для этой цели ngx_pagespeed.
Рекомендуется к прочтению: Установите Mod_Pagespeed для повышения производительности сервера Apache.
Ngx_pagespeed — это бесплатный модуль Nginx с открытым исходным кодом, используемый для повышения скорости работы сайтов, а также сокращения времени загрузки страниц. Это значительно сокращает время, необходимое пользователям для просмотра содержимого вашего сайта и взаимодействия с ним.
Возможности Ngx_pagespeed:
- Поддержка HTTPS и контроля URL-адресов.
- Оптимизация изображений: удаление метаданных, динамическое изменение размера, повторное сжатие.
- Минимизация CSS и JavaScript, конкатенация, встраивание и структурирование.
- Встраивание небольших ресурсов.
- Отложена загрузка изображений и JavaScript.
- Переписывание HTML.
- Продление срока службы кэша.
- Позволяет настраивать несколько серверов и многое другое.
В этом руководстве мы покажем, как установить Nginx с помощью ngx_pagespeed и протестировать всю установку на RHEL/CentOS 7.
Внимание. Пользователи Debian и Ubuntu могут воспользоваться этим руководством, чтобы установить Ngx_Pagespeed для повышения производительности Nginx.
Шаг 1. Установите Nginx из исходного кода.
1. Для установки Nginx с ngx_pagespeed необходимо скомпилировать его из исходного кода. Сначала установите все пакеты, необходимые для компиляции Nginx, из исходного кода следующим образом.
yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel
OR
yum group install "Development Tools"
2. Затем получите исходные файлы последней версии Nginx (1.13.2 на момент написания этой статьи) с помощью команды wget и извлеките загруженный tar-шар, как показано ниже. .
mkdir ~/downloads
cd ~/downloads
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 ~/downloads/nginx-1.13.2
./configure --add-module=$HOME/downloads/ngx_pagespeed-1.12.34.2-stable/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}
6. Затем скомпилируйте и установите Nginx следующим образом.
make
make install
7. После завершения процесса установки создайте все необходимые символические ссылки для Nginx.
ln -s /usr/local/nginx/conf/ /etc/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
Шаг 3. Создание файла модуля Nginx для SystemD
8. Далее, поскольку systemd является системой init в CentOS 7, вам необходимо вручную создать модуль Nginx. файл для этого.
Сначала создайте файл /lib/systemd/system/nginx.service, затем возьмите файл службы NGINX systemd и вставьте конфигурацию файла модуля в файл ниже.
vi /lib/systemd/system/nginx.service
Обратите внимание на расположение PIDFile и двоичного файла NGINX, которые вы установили при настройке и компиляции Nginx. Вы установите их в соответствующие переменные в файле модуля, как показано ниже. :
[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 и включите ее при загрузке системы, выполнив приведенные ниже команды.
systemctl start nginx
systemctl enable nginx
systemctl status nginx
Шаг 4. Настройте Nginx с модулем Pagespeed
10. После установки Nginx вам необходимо включить модуль Ngx_pagespeed. Начните с создания каталога, в котором модуль будет кэшировать файлы вашего веб-сайта, и установите соответствующие разрешения для этого каталога с помощью команд ниже.
mkdir -p /var/ngx_pagespeed_cache
chown -R nobody:nobody /var/ngx_pagespeed_cache
11. Теперь пришло время включить модуль Ngx_pagespeed, откройте файл конфигурации Nginx и добавьте строки ниже.
Важно. Если вы настроили виртуальные хосты nginx на сервере, добавьте приведенные выше директивы PageSpeed в каждый блок сервера, чтобы включить Ngx_pagespeed на каждом сайте.
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 с включенным 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 logs/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 не содержит ошибок, выполнив приведенную ниже команду. Если все в порядке, вы увидите вывод ниже.
nginx -t
13. Наконец, перезапустите сервер Nginx, чтобы изменения вступили в силу.
systemctl restart nginx
Шаг 5. Тестирование Nginx с помощью Ngx_pagespeed
14. Чтобы узнать, работает ли теперь Ngx_pagespeed совместно с Nginx, он должен появиться в заголовке X-Page-Speed.
curl -I -p http://localhost
Если вы не увидели приведенный выше заголовок, вернитесь к шагу 11 и внимательно следуйте инструкциям по включению Ngx-pagespeed с последующими шагами.
Репозиторий Ngx-pagespeed на Github: https://github.com/pagespeed/ngx_pagespeed
Вот и все! В этом руководстве мы показали, как установить и настроить Nginx с модулем Ngx_pagespeed, чтобы оптимизировать и улучшить производительность сайта, а также сократить время загрузки страницы.
Чтобы защитить веб-сервер Nginx, прочитайте эту статью — Полное руководство по защите, усилению защиты и повышению производительности веб-сервера Nginx.
Как всегда, не стесняйтесь сообщать нам о любых вопросах или мыслях по поводу этого урока.