„CentOS 7“ paspartinkite „Nginx“ našumą naudodami „Ngx_Pagespeed“


„Nginx“ [variklis x] yra nemokama ir atviro kodo, daugiaplatformė, galinga žiniatinklio serveris ir atvirkštinio tarpinio serverio programinė įranga, parašyta C. Tai taip pat yra standartinis IMAP/POP3 ir TCP/UDP tarpinis serveris ir gali būti naudojamas kaip apkrova. balansuotojas.

„Nginx“ yra gerai žinomas HTTP serveris (palyginamas su „Apache“ HTTP serveriu), valdantis daugybę interneto svetainių; jis yra populiarus dėl didelio našumo ir stabilumo.

Norint pagerinti vartotojo patirtį svetainėje, reikia atsižvelgti į įvairius svarbius veiksnius, įskaitant svetainės greitį ir puslapio greitį (dar vadinamą puslapio įkėlimo laiku). Jei jūsų svetainę valdo „Nginx“, šiam tikslui galite naudoti „ngx_pagespeed“.

„Ngx_pagespeed“ yra nemokamas ir atviro kodo „Nginx“ modulis, naudojamas padidinti svetainių greitį ir sumažinti puslapio įkėlimo laiką. Tai žymiai sutrumpina laiką, per kurį vartotojai mato ir sąveikauja su jūsų svetainės turiniu.

  • HTTPS ir URL valdymo palaikymas.
  • Vaizdo optimizavimas: metaduomenų pašalinimas, dinaminis dydžio keitimas, perkompresavimas.
  • CSS ir „JavaScript“ suskaidymas, sujungimas, įtraukimas ir išdėstymas.
  • Mažas šaltinis.
  • Atidedamas atvaizdo ir „JavaScript“ įkėlimas.
  • HTML perrašymas.
  • Talpyklos tarnavimo laiko pratęsimas.
  • Leidžia konfigūruoti kelis serverius ir daugelį kitų.

Šioje pamokoje parodysime, kaip įdiegti „Nginx“ su „ngx_pagespeed“, ir išbandysime visą diegimą „RHEL/CentOS 7“.

Dėmesio: „Debian“ ir „Ubuntu“ vartotojai gali sekti šį vadovą, norėdami įdiegti „Ngx_Pagespeed“, kad pagerintumėte „Nginx“ našumą.

1 žingsnis: įdiekite „Nginx“ iš šaltinio

1. Norėdami įdiegti „Nginx“ naudodami „ngx_pagespeed“, turite jį sukompiliuoti iš šaltinio. Pirmiausia įdiekite visus paketus, reikalingus „Nginx“ kompiliuoti iš tokio šaltinio.

# yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel
OR
# yum group install "Development Tools"

2. Tada naudodami komandą wget gaukite naujausios „Nginx“ versijos (1.13.2 šio rašymo metu) šaltinio failus ir išskleiskite atsisiųstą deguto kamuolį.

# 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. Tada atsisiųskite ngx_pagespeed šaltinio failus ir išpakuokite suglaudintus failus.

# wget -c https://github.com/pagespeed/ngx_pagespeed/archive/v1.12.34.2-stable.zip
# unzip v1.12.34.2-stable.zip

4. Dabar pereikite į neišpakuotą katalogą „ngx_pagespeed“ ir nurodykite, kad „PageSpeed“ optimizavimo bibliotekos sudarytų „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 žingsnis: konfigūruokite ir kompiliuokite „Nginx“ naudodami „Ngx_Pagespeed“

5. Dabar eikite į katalogą „nginx-1.13.2“ ir sukonfigūruokite „Nginx“ šaltinį vykdydami toliau pateiktas komandas.

# 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. Tada sukompiliuokite ir įdiekite „Nginx“ taip.

# make
# make install

7. Baigę diegimo procesą, sukurkite visas reikalingas „Nginx“ nuorodas.

# ln -s /usr/local/nginx/conf/ /etc/nginx/
# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

3 žingsnis: „Nginx“ vieneto failo, skirto „SystemD“, kūrimas

8. Be to, kadangi „systemd“ yra „CentOS 7“ pradinė sistema, turite rankiniu būdu sukurti jai „Nginx“ vieneto failą.

Sukurkite failą /lib/systemd/system/nginx.service, tada paimkite „NGINX systemd“ paslaugos failą, įklijuokite vieneto failo konfigūraciją į žemiau esantį failą.

# vi /lib/systemd/system/nginx.service

Atkreipkite dėmesį į PIDFile ir dvejetainio NGINX vietą, kurią nustatėte konfigūruodami ir kompiliuodami „Nginx“, juos nustatysite atitinkamuose vieneto failo kintamuosiuose, kaip parodyta žemiau:

[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

Išsaugokite failą ir uždarykite jį.

9. Šiuo metu paleiskite „nginx“ paslaugą vidutiniam laikui ir įgalinkite ją paleisti iš sistemos paleidimo, vykdydami toliau pateiktas komandas.

# systemctl start nginx
# systemctl enable nginx
# systemctl status nginx

4 žingsnis: konfigūruokite „Nginx“ naudodami „Pagespeed“ modulį

10. Įdiegę „Nginx“, turite įjungti „Ngx_pagespeed“ modulį. Pirmiausia sukurkite katalogą, kuriame modulis talpins jūsų svetainės failus ir nustatykite atitinkamas teises šiame kataloge naudodamiesi toliau pateiktomis komandomis.

# mkdir -p /var/ngx_pagespeed_cache
# chown -R nobody:nobody /var/ngx_pagespeed_cache

11. Dabar atėjo laikas įjungti „Ngx_pagespeed“ modulį, atidaryti „Nginx“ konfigūracijos failą ir pridėti toliau nurodytas eilutes.

Svarbu: jei serveryje sukonfigūravote bet kuriuos „nginx“ virtualiuosius pagrindinius kompiuterius, prie kiekvieno serverio bloko pridėkite aukščiau nurodytas puslapių greičio direktyvas, kad kiekvienoje svetainėje įgalintumėte „Ngx_pagespeed“.

# vi /etc/nginx/nginx.conf

Serverio bloke pridėkite šias „Ngx_pagespeed“ konfigūracijos eilutes.

# 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" { }

Toliau pateiktas veikiantis „Nginx“ konfigūracijos failo su įgalintu „Ngx_pagespeed“ numatytame virtualiame pagrindiniame kompiuteryje pavyzdys.

#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. Po to įsitikinkite, kad „Nginx“ konfigūracijos faile nėra klaidų, vykdydami žemiau esančią komandą. Jei viskas gerai, pamatysite išvestį žemiau.

# nginx -t

13. Galiausiai iš naujo paleiskite „Nginx“ serverį, kad pakeitimai įsigaliotų.

# systemctl restart nginx

5 žingsnis: „Nginx“ testavimas naudojant „Ngx_pagespeed“

14. Norėdami sužinoti, ar „Ngx_pagespeed“ dabar veikia kartu su „Nginx“, jis turi būti rodomas antraštėje „X-Page-Speed“.

# curl -I -p http://localhost

Jei nematėte pirmiau pateiktos antraštės, grįžkite prie 11 veiksmo ir atidžiai vykdykite instrukcijas, kad įgalintumėte „Ngx-pagespeed“ su tolesniais veiksmais.

„Ngx-pagespeed“ „Github“ saugykla: https://github.com/pagespeed/ngx_pagespeed

Tai viskas! Šioje pamokoje parodėme, kaip įdiegti ir sukonfigūruoti „Nginx“ su „Ngx_pagespeed“ moduliu, siekiant optimizuoti ir pagerinti svetainės našumą ir sutrumpinti puslapio įkėlimo laiką.

Norėdami apsaugoti „Nginx“ tinklo serverį, perskaitykite šį straipsnį - „Nginx“ tinklo serverio saugaus, grūdinto ir našumo gerinimo vadovas.

Kaip visada, nedvejodami praneškite mums apie šią pamoką su klausimais ar mintimis.