CentOS 7'de Ngx_Pagespeed ile Nginx Performansını Hızlandırın


Nginx [engine x], C dilinde yazılmış ücretsiz ve açık kaynaklı, çapraz platformlu, güçlü bir web sunucusu ve ters proxy yazılımıdır. Aynı zamanda standart bir IMAP/POP3 ve TCP/UDP proxy sunucusudur, ve yük dengeleyici olarak kullanılabilir.

Nginx, web üzerindeki çok sayıda siteye güç sağlayan, iyi bilinen bir HTTP sunucusudur (Apache HTTP sunucusuyla karşılaştırılabilir); yüksek performansı ve kararlılığı nedeniyle popülerdir.

Site hızı ve sayfa hızı (sayfa yükleme süresi olarak da bilinir) dahil olmak üzere, sitenizdeki kullanıcı deneyimini geliştirmek istediğinizde göz önünde bulundurmanız gereken çeşitli önemli faktörler vardır. Siteniz Nginx tarafından destekleniyorsa bu amaçla ngx_pagespeed'i kullanabilirsiniz.

Önerilen Okuma: Apache Sunucu Performansını Artırmak için Mod_Pagespeed'i yükleyin

Ngx_pagespeed, sitelerin hızını artırmanın yanı sıra sayfa yükleme süresini kısaltmak için kullanılan ücretsiz ve açık kaynaklı bir Nginx modülüdür. Kullanıcıların site içeriğinizi görmesi ve bunlarla etkileşimde bulunması için gereken süreyi önemli ölçüde azaltır.

Ngx_pagespeed Özellikleri:

  • HTTPS ve URL kontrolü desteği.
  • Görüntü optimizasyonu: meta verilerin çıkarılması, dinamik yeniden boyutlandırma, yeniden sıkıştırma.
  • CSS ve JavaScript küçültme, birleştirme, satır içi ve ana hat oluşturma.
  • Küçük kaynak satır içi.
  • Resim ve JavaScript yüklemesi erteleniyor.
  • HTML'nin yeniden yazılması.
  • Önbellek kullanım ömrünün uzatılması.
  • Birden fazla sunucu ve diğerleri için yapılandırmaya izin verir.

Bu eğitimde Nginx'in ngx_pagespeed ile nasıl kurulacağını göstereceğiz ve tüm kurulumu RHEL/CentOS 7 üzerinde test edeceğiz.

Dikkat: Debian ve Ubuntu kullanıcıları, Nginx Performansını Artırmak için Ngx_Pagespeed Kurulumu için bu kılavuzu takip edebilir.

Adım 1: Nginx'i Kaynaktan Yükleyin

1. Nginx'i ngx_pagespeed ile yüklemek için onu kaynaktan derlemeniz gerekir. Öncelikle Nginx'i bu şekilde kaynaktan derlemek için gereken tüm paketleri kurun.

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

2. Daha sonra, wget komutunu kullanarak Nginx'in en son sürümünün (1.13.2) kaynak dosyalarını edinin ve indirilen tar topunu aşağıdaki gibi çıkarın. .

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. Ardından, ngx_pagespeed kaynak dosyalarını indirin ve sıkıştırılmış dosyaları açın.

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

4. Şimdi sıkıştırılmış ngx_pagespeed dizinine geçin ve PageSpeed optimizasyon kitaplıklarının Nginx'i aşağıdaki gibi derlemesini sağlayın.

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

Adım 2: Nginx'i Ngx_Pagespeed ile Yapılandırma ve Derleme

5. Şimdi nginx-1.13.2 dizinine gidin ve aşağıdaki komutları çalıştırarak Nginx kaynağını yapılandırın.

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. Ardından Nginx'i aşağıdaki gibi derleyin ve yükleyin.

make
make install

7. Kurulum işlemi tamamlandığında Nginx için gerekli tüm sembolik bağlantıları oluşturun.

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

Adım 3: SystemD için Nginx Birim Dosyası Oluşturma

8. Daha sonra systemd, CentOS 7'deki init sistemi olduğundan, Nginx birimini manuel olarak oluşturmanız gerekir. bunun için dosya.

Öncelikle /lib/systemd/system/nginx.service dosyasını oluşturun, ardından NGINX systemd hizmet dosyasını alın, birim dosya yapılandırmasını aşağıdaki dosyaya yapıştırın.

vi /lib/systemd/system/nginx.service

Nginx'i yapılandırırken ve derlerken ayarladığınız PIDFile ve NGINX ikili dosyasının konumunu not edin; bunları aşağıda gösterildiği gibi birim dosyasındaki uygun değişkenlere ayarlayacaksınız. :

[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

Dosyayı kaydedin ve kapatın.

9. Bu noktada ortalama süre için nginx hizmetini başlatın ve aşağıdaki komutları çalıştırarak sistem açılışında başlamasını sağlayın.

systemctl start nginx
systemctl enable nginx
systemctl status nginx

Adım 4: Nginx'i Pagespeed Modülüyle Yapılandırma

10. Nginx yüklendikten sonra Ngx_pagespeed modülünü etkinleştirmeniz gerekir. Modülün web siteniz için dosyaları önbelleğe alacağı bir dizin oluşturarak başlayın ve aşağıdaki komutlarla bu dizinde uygun izinleri ayarlayın.

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

11. Şimdi Ngx_pagespeed modülünü etkinleştirmenin, Nginx yapılandırma dosyasını açmanın ve aşağıdaki satırları eklemenin zamanı geldi.

Önemli: Sunucuda herhangi bir nginx sanal ana bilgisayarını yapılandırdıysanız, her sitede Ngx_pagespeed'i etkinleştirmek için yukarıdaki sayfa hızı yönergelerini her sunucu bloğuna ekleyin.

vi /etc/nginx/nginx.conf

Sunucu bloğunun içine aşağıdaki Ngx_pagespeed yapılandırma satırlarını ekleyin.

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

Aşağıda, varsayılan sanal ana bilgisayarda Ngx_pagespeed'in etkin olduğu Nginx yapılandırma dosyasının çalışan bir örneği bulunmaktadır.

#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. Daha sonra aşağıdaki komutu çalıştırarak Nginx config dosyasının hatasız olduğundan emin olun, her şey yolundaysa aşağıdaki çıktıyı göreceksiniz.

nginx -t

13. Son olarak değişikliklerin etkili olması için Nginx sunucusunu yeniden başlatın.

systemctl restart nginx

Adım 5: Nginx'i Ngx_pagespeed ile test etme

14. Ngx_pagespeed'in artık Nginx ile birlikte çalışıp çalışmadığını bilmek için X-Page-Speed başlığında görünmesi gerekir.

curl -I -p http://localhost

Yukarıdaki başlığı göremediyseniz 11. adıma geri dönün ve sonraki adımlarda Ngx-pagespeed'i etkinleştirmek için talimatları dikkatlice izleyin.

Ngx-pagespeed Github deposu: https://github.com/pagespeed/ngx_pagespeed

Hepsi bu! Bu eğitimde, site performansını optimize etmek, geliştirmek ve sayfa yükleme süresini azaltmak için Nginx'in Ngx_pagespeed modülü ile nasıl kurulacağını ve yapılandırılacağını gösterdik.

Nginx web sunucusunun güvenliğini sağlamak için bu makaleyi okuyun – Nginx Web Sunucusunun Güvenliğini Sağlamak, Güçlendirmek ve Performansını Artırmak için En İyi Kılavuz.

Her zaman olduğu gibi, bu eğitimle ilgili sorularınızı veya düşüncelerinizi bize bildirmekten çekinmeyin.