Wyszukiwanie w witrynie

Skompiluj Nginx z modułem ngx_pagespeed na serwerze Ubuntu


ngx_pagespeed to moduł Nginx typu open source, który automatycznie stosuje najlepsze praktyki w celu optymalizacji szybkości witryny. W tym samouczku omówimy, jak skompilować Nginx z modułem ngx_pagespeed na serwerze Ubuntu LTS.

Krok 1: Utwórz kopię zapasową plików konfiguracyjnych Nginx

Po skompilowaniu i zainstalowaniu Nginx oryginalne pliki konfiguracyjne Nginx zostaną nadpisane. Możesz użyć następującego polecenia, aby utworzyć kopię zapasową głównego pliku konfiguracyjnego i plików bloków serwera w katalogu domowym. Tylda (~) reprezentuje Twój katalog domowy.

cp /etc/nginx/nginx.conf /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/*.conf ~

Krok 2: Dodaj oficjalne repozytorium Nginx

Samouczek zademonstruje kompilację najnowszej głównej wersji Nginx. Dodajemy oficjalne repozytorium Nginx, jak pokazano poniżej.

Najpierw pobierz klucz Nginx GPG i zaimportuj go do systemu serwerowego Ubuntu.

wget http://nginx.org/keys/nginx_signing.key

sudo apt-key add nginx_signing.key

Następnie utwórz plik listy źródeł dla Nginx.

sudo nano /etc/apt/sources.list.d/nginx.list

Dodaj następujące dwie linie do tego pliku. Linia deb-src pozwala nam pobrać pakiety źródłowe Nginx za pomocą polecenia apt source.

deb http://nginx.org/packages/mainline/ubuntu/ focal nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ focal nginx

Jeśli używasz Ubuntu 22.04, zamień focal na jammy.

Naciśnij Ctrl+O, aby zapisać plik. Naciśnij Ctrl+X, aby zamknąć plik. Następnie zaktualizuj indeks pakietu lokalnego.

sudo apt update

Teraz oficjalne repozytorium Nginx zostało dodane do serwera Ubuntu.

Krok 3: Pobierz pakiet źródłowy Nginx

Utworzymy katalog nginx w katalogu domowym do przechowywania źródeł Nginx, a następnie umieścimy CD w tym katalogu.

mkdir ~/nginx && cd ~/nginx

Zainstaluj dpkg-dev i pobierz pakiet źródłowy Nginx za pomocą poniższego polecenia:

sudo apt install dpkg-dev
sudo apt source nginx

Sprawdź pobrane pliki.

ls ~/nginx/

Wyjście :

nginx-1.23.2                              nginx_1.23.2-1~focal.dsc
nginx_1.23.2-1~focal.debian.tar.xz        nginx_1.23.2.orig.tar.gz

Krok 4: Pobierz pakiet źródłowy ngx_pagespeed

Aby skompilować Nginx z modułem ngx_pagespeed, potrzebujemy także pakietu źródłowego ngx_pagespeed. Przejdź do strony pobierania Github ngx_pagespeed. Pobierz najnowszą wersję beta do swojego katalogu domowego (wersja 1.13.35.2-beta w momencie pisania tego tekstu). Może być konieczna zmiana numeru wersji.

cd ~

wget https://codeload.github.com/pagespeed/ngx_pagespeed/zip/v1.13.35.2-beta

rozpakuj to:

sudo apt-get install unzip

unzip v1.13.35.2-beta

cd do nowo utworzonego katalogu:

cd incubator-pagespeed-ngx-1.13.35.2-beta/

Musimy także pobrać bibliotekę PSOL. (Biblioteka optymalizacji PageSpeed) i wyodrębnij ją. Numer wersji odpowiada numerowi wersji PageSpeed.

wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz

tar xvf 1.13.35.2-x64.tar.gz

Utworzy katalog psol w katalogu ~/incubator-pagespeed-ngx-1.13.35.2-beta i tam właśnie powinien się znaleźć.

Krok 5: Dodaj moduł ngx_pagespeed do reguł kompilacji Nginx

Edytuj plik reguł kompilacji Nginx.

sudo nano ~/nginx/nginx-1.23.2/debian/rules

Na końcu sekcji COMMON_CONFIGURE_ARGS dodaj następujący wiersz. Zastąp username swoją rzeczywistą nazwą użytkownika. Ta linia określa lokalizację modułu ngx_pagespeed.

--add-module=/home/username/ngx_pagespeed-1.13.35.2-beta

Ten samouczek pobiera stronę źródłową ngx_pagespeed do katalogu domowego. Jeśli używasz konta root, zamień /home/username na /root. ponieważ katalog domowy użytkownika root to /root.

Zauważ też, że musisz dodać ukośnik odwrotny w linii --with-ld-opt, jak na zrzucie ekranu poniżej. Jeśli tego nie zrobisz, dodana linia --add-module zostanie zignorowana podczas kompilacji Nginx.

Teraz zapisz i zamknij plik.

Krok 6: Rozpocznij kompilację

Upewnij się, że jesteś w katalogu źródłowym Nginx.

cd ~/nginx/nginx-1.23.2/

Zainstaluj wszystkie potrzebne zależności, aby zbudować nasz pakiet deb Nginx.

sudo apt build-dep nginx

Teraz użyj następującego polecenia, aby zbudować pakiet deb.

sudo dpkg-buildpackage -b

Weź filiżankę kawy i poczekaj kilka minut. Na jednordzeniowym serwerze VPS KVM proces kompilacji trwał około 10 minut. Kiedy to się skończy, w katalogu ~/nginx/ będzie 7 plików .deb. Musimy jedynie zainstalować pakiet nginx_1.11.1-1~xenial_amd64.deb lub nginx_1.11.1-1~xenial_i386.deb, w zależności od architektury systemu operacyjnego. Pozostałe to pakiet modułów dynamicznych Nginx i pakiet debugowania. Jeśli chcesz, możesz je również zainstalować.

Jeśli instalowałeś już Nginx, czas usunąć starą wersję, a następnie zainstalować nową.

sudo apt remove nginx nginx-common nginx-full

cd ~/nginx

sudo dpkg -i nginx_1.23.2-1~focal_amd64.deb

Lub

sudo dpkg -i nginx_1.23.2-1~focal_i386.deb

Teraz uruchommy Nginx.

sudo systemctl start nginx

Jeśli zobaczysz następujący komunikat o błędzie.

Failed to start nginx.service: Unit nginx.service is masked.

Następnie zdemaskuj Nginx i ponownie wydaj polecenie start.

sudo systemctl unmask nginx

Pamiętaj, że proces Nginx może działać jako użytkownik nginx lub www-data. Można to zmienić edytując pierwszą linię w pliku /etc/nginx/nginx.conf. Upewnij się tylko, że Nginx działa jako ten sam użytkownik z PHP-FPM.

Teraz sprawdź argumenty konfiguracyjne Nginx.

sudo nginx -V

Jeśli na końcu zobaczysz następujący wiersz, oznacza to, że moduł ngx_pagespeed został pomyślnie dodany do Nginx.

--add-module=/home/username/ngx_pagespeed-1.13.35.2-beta

Krok 7: Włącz moduł ngx_pagespeed

PageSpeed jest instalowany razem z Nginx, ale domyślnie jest wyłączony. Przed włączeniem tej funkcji zalecamy przetestowanie szybkości witryny na pingdom.com lub webpagetest.org. Zwróć uwagę na rozmiar strony, liczbę żądań, czas ładowania strony itp. Po włączeniu PageSpeed wykonaj ponownie test, aby porównać oba wyniki.

Utwórz folder dla pamięci podręcznych Pagespeed i zmień jego właściciela na użytkownika Nginx (www-data lub nginx), aby mógł zostać zapisany przez Nginx.

sudo mkdir -p /var/ngx_pagespeed_cache

sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

Teraz edytuj plik konfiguracyjny bloku serwera Nginx.

sudo nano /etc/nginx/conf.d/your-domain.conf

Dodaj następujące dyrektywy Pagespeed w sekcji serwera.

# enable pagespeed module on this server block
pagespeed on;

# Needs to exist and be writable by nginx. Use tmpfs for best performance.
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 ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }

pagespeed RewriteLevel CoreFilters;

Jeśli hostujesz wiele witryn internetowych na jednym serwerze, dodaj powyższe dyrektywy Pagespeed do każdego pliku konfiguracyjnego bloku serwera, aby włączyć Pagespeed na każdym z nich.

Ostatnia dyrektywa ustawiła CoreFilters jako poziom przepisywania. PageSpeed oferuje 3 poziomy przepisywania: CoreFilter, PassThrough i OptimizeForBandwidth. Wartość domyślna to CoreFilter, ponieważ zawiera filtry uważane za bezpieczne dla większości witryn.

CoreFilter zawiera następujące filtry.

   add_head
   combine_css
   combine_javascript
   convert_meta_tags
   extend_cache
   fallback_rewrite_css_urls
   flatten_css_imports
   inline_css
   inline_import_to_link
   inline_javascript
   rewrite_css
   rewrite_images
   rewrite_javascript
   rewrite_style_attributes_with_url

Zapisz i zamknij plik konfiguracyjny bloku serwera. Następnie załaduj ponownie Nginx.

sudo systemctl reload nginx

8. Sprawdź, czy PageSpeed działa

Przejdź do swojej witryny. Odśwież kilka razy, a następnie sprawdź źródło strony. Naciśnij klawisz Ctrl+F i wyszukaj opcję szybkość strony. Zobaczysz, że wiele zasobów Twojej witryny zostało przetworzonych przez pagespeed. Niektóre pliki css i pliki javascript są połączone w jeden plik. Jeśli korzystasz z przeglądarki Google Chrome, zobaczysz, że zdjęcia w Twojej witrynie zostały przekonwertowane do formatu webp. webp może znacznie zmniejszyć rozmiar pliku obrazu.

Działanie ngx_pagespeed możesz także sprawdzić, porównując test szybkości swojej witryny.

Również na swoim serwerze możesz wydać następujące polecenie:

curl -I -p http://your-domain.com| grep X-Page-Speed

Zobaczysz X-Page-Speed i numer jego wersji.

X-Page-Speed: 1.13.35.2-7423

9. Powstrzymaj Nginx przed aktualizacją

Jeśli w repozytorium dostępna jest nowsza wersja Nginx, polecenie apt-get upgrade domyślnie zaktualizuje Nginx, a moduł ngx_pagespeed zniknie. Musimy więc uniemożliwić aktualizację Nginx. Można to osiągnąć za pomocą następującego polecenia:

sudo apt-mark hold nginx

Aby pokazać, jakie pakiety są przechowywane:

apt-mark showhold

Niektóre dyrektywy dotyczące szybkości strony, które możesz chcieć dodać w plikach konfiguracyjnych bloków serwera Nginx, których nie ma w CoreFilters.

pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters insert_dns_prefetch;

Nie zapomnij ponownie załadować Nginx po zmodyfikowaniu plików konfiguracyjnych bloku serwera.

Aby uzyskać szczegółowe wyjaśnienie każdego filtra, przejdź do strony Filtr Google PageSpeed.

Komentarze, pytania lub sugestie są zawsze mile widziane. Jeśli ten post był dla Ciebie przydatny, 🙂 udostępnij go znajomym w mediach społecznościowych! Czekaj na więcej samouczków dotyczących Linuksa.

Powiązane artykuły