Pagespeed Modulü ile Birlikte Nginx Kurulumu

Pagespeed, Google'ın sunucular için geliştirdiği harika bir optimizasyon aracı olup, CSS ve Javascript dosyalarınız ile resimlerinizi, kısacası neredeyse tüm statik dosyalarınızı, hızlı sunabilmek için olabildiğince en optimum boyuta getirmekte ve HTML çıktılarındaki gereksiz boşlukları kaldırmaktadır. Kurulumu da gayet basit, tek sıkıntılı yani manuel olarak nginx'i sizin yapılandırmanız gerekiyor.

Öncelikle sisteminizde nginx kuruluysa, nginx'i kaldırmanız lazım.
$ sudo apt-get purge nginx nginx-common
Sonrasında build edebilmek için gerekli paketleri indirmeniz gerekiyor.
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev unzip checkinstall
Sonrasında nginx'i kendimiz yapılandııracağımız için bunun için bir klasör oluşturup, son versiyonları indirmemiz lazım. Burada ufak bir not, ben bu makaleyi yazdığımda, nginx son versiyonu 1.9.15, pagespeed son versiyonu ise 1.11.33.0 idi. Bunları kontrol etmeyi unutmayın.
$ mkdir ~/nginx-custom && cd ~/nginx-custom
$ NPS_VERSION=1.11.33.0
$ NGINX_VERSION=1.9.15
Öncelikle nginx'i indirmek için alttaki komutları çalıştırın.
$ wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
$ tar -xvzf nginx-${NGINX_VERSION}.tar.gz
Sonrasında pagespeed modülü için de alttaki komutları çalıştırmanız lazım.
$ wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
$ unzip release-${NPS_VERSION}-beta.zip
$ cd ngx_pagespeed-release-${NPS_VERSION}-beta/
$ wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
$ tar -xzvf ${NPS_VERSION}.tar.gz
Yapılandırmak için,
$ cd ~/nginx-custom/nginx-${NGINX_VERSION}/
$ ./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=www-data \
--group=www-data \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-z,relro -Wl,--as-needed' \
--with-ipv6 \
--with-debug \
--add-module=$HOME/nginx-custom/ngx_pagespeed-release-${NPS_VERSION}-beta
$ make && checkinstall --install=no -y
Bu işlem biraz uzun sürebilir, işlem bittikten sonra yüklemek kalıyor. Bunun için de,
$ sudo dpkg -i nginx_${NGINX_VERSION}-1_amd64.deb
Artık nginx kurulu, birkaç ufak ayarlamayla sistemi hazır hale getireceğiniz.

Öncelikle önbellekte tutulacak dosyalar için alan oluşturmamız lazım, bu alanın da sunucu tarafından yazılabilir olması lazım.
$ mkdir /var/ngx_pagespeed_cache
$ chown www-data:www-data /var/ngx_pagespeed_cache
Son olarak da kendi sunucunuza ait kendi ayarlarınızı düzenlemeniz lazım, bunun için de
$ mkdir -p /var/log/nginx/siteniz.com
$ mkdir /var/cache/nginx
$ nano /etc/nginx/nginx.conf
Örnek olması için benim ayarlarım alttaki gibi, pagespeed ile başlayan kısmın her blokta olmasına dikkat edin.
user www-data;

worker_processes auto;
worker_rlimit_nofile 8192;

events {
    worker_connections  8000;
}

error_log  /var/log/nginx/error.log;
pid /var/run/nginx.pid;

http {
    server_tokens off;

    include       mime.types;
    default_type  application/octet-stream;
    charset_types text/css text/plain text/vnd.wap.wml application/javascript application/json application/rss+xml application/xml;

    sendfile    on;
    tcp_nopush  on;

    keepalive_timeout 20s;

    access_log  /var/log/nginx/access.log;

    gzip  on;
    gzip_comp_level    5;
    gzip_min_length    256;
    gzip_proxied       any;
    gzip_vary          on;

    gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/ld+json
        application/manifest+json
        application/rss+xml
        application/vnd.geo+json
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/bmp
        image/svg+xml
        image/x-icon
        text/cache-manifest
        text/css
        text/plain
        text/vcard
        text/vnd.rim.location.xloc
        text/vtt
        text/x-component
        text/x-cross-domain-policy;

    server {
        listen          80;
        server_name     siteniz.com;

        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
            add_header "" "";
        }
        location ~ "^/pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon$" { }

        # Diger Ayarlariniz
    }

    server {
        listen 443 ssl;
        server_name siteniz.com;

        access_log /var/log/nginx/siteniz.com/access.log;
        error_log  /var/log/nginx/siteniz.com/error.log;

        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
            add_header "" "";
        }

        location ~ "^/pagespeed_static/" { }
        location ~ "^/ngx_pagespeed_beacon$" { }

        # Diger Ayarlariniz
    }
}
Son olarak, tüm bu işlemlerden sonra nginx'i başlatmak için alttaki komutu kullanabilirsiniz.
$ sudo /usr/sbin/nginx
Durdurmak için,
$ sudo /usr/sbin/nginx -s stop
Ayarları tekrar yüklemek için,
$ sudo /usr/sbin/nginx -s reload
Tabii bir de yapılandırmak için indirdiğiniz dosyaları silmeyi unutmayın.
$ sudo rm -R ~/nginx-custom
Tüm bunların yanında, pagespeed'in sağladığı birçok filtre de mevcut. Altta, kendimce faydalı olduklarını düşündüğüm birkaçını açıklamaya çalıştım, daha detaylı incelemek için dökümanı inceleyebilirsiniz.
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

pagespeed EnableFilters collapse_whitespace; # Sayfadan boşlukları kaldırır, böylece sitenin yüklenmesi için gerekli olan bit sayısı azalır.
pagespeed EnableFilters extend_cache;  # Önbellek sürelerini arttırır.
pagespeed EnableFilters lazyload_images;  # Tüm resimleri direkt olarak yüklemektense, yüklemesi gerektiği sayfa kısmı için yükler
pagespeed EnableFilters make_google_analytics_async;  # Google Analitik isteğini asenkron işler
pagespeed EnableFilters recompress_images;  # Resimleri sıkıştırır, yüksek RAM ihtiyacı bulunmaktadır
pagespeed EnableFilters resize_images;  # Resimleri height ve width etiketleriyle belirtilen genişlik ve yükseklikte oluşturur, yüksek RAM ihtiyacı bulunmaktadır
pagespeed EnableFilters rewrite_images; # Resimleri optimum şekilde düzenler, yüksek RAM ihtiyacı bulunmaktadır

location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
add_header "" "";
}
Burada anlattıklarımdan farklı bir şey yapmadım, bu siteye masaüstünde pagespeed insights 92/100 puan veriyor, eğer ki hıza önem veriyorsanız, ki vermelisiniz, pagespeed kurmaktan çekinmeyin.

Ayrıca, eğer ki web fontlarından birisini kullanıyorsanız, Google Web Fonts gibi, webfontloader paketini mutlaka inceleyin ve sisteminizde uygulayın.

Son bir not daha, bu yöntem ile nginx'i yüklerseniz, güncellemek için üstteki işlemleri en baştan yapmanız lazım. Ayrıca sistemi her yeniden başlattığınızda($ shutdown -r now) yine kendinizin nginx'i başlatması gerekiyor. Ancak bu problemi biraz daha karmaşık işler için kullanılan upstart ile aşmak mümkün olduğu gibi, sadece bir dosyaya eklenebilecek bir satır ile aşmak da mümkün.

@reboot anahtar kelimesini kullanarak bir cron görevi ekleyerek, cron yeniden çalışmaya başladığında bir komut çalıştırabilirsiniz.
$ su -
$ crontab -e
Karşınıza çıkan kısımda(eğer ilk defa açtıysanız sorduğu soruda kullanmak istediğiniz editörü seçin) alttaki kısmı ekleyip, kaydedin.
@reboot /usr/sbin/nginx
Alternatif olarak da, /etc/rc.local dosyasını düzenleyip, yine /usr/sbin/nginx komutunu ekleyebilirsiniz.

Artık sistemi yeniden başlattığınızda nginx de otomatik olarak başlayacak.