Pagespeed Modulü ile Birlikte Nginx Kurulumu

21 Nisan 2016

Son Güncellenme: 28 Mart 2019

PageSpeed, Google'ın sunucular ve dolayısıyla internet siteleri için geliştirdiği harika bir optimizasyon aracı olup, örneğin 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ırmakta olup, birçok kişi tarafından tercih edilen, arama motoru optimizasyonu (SEO) için de faydalı olan bir modüldür.

Ön Hazırlık

PageSpeed modulü ile birlikte nginx kurulumu yapmak için öncelikle sisteminizde nginx kuruluysa, nginx'i kaldırmanız, ayrıca nginx'i derlemek için gerekli paketleri yüklemeniz lazım.

$ sudo apt purge nginx nginx-common
$ sudo rm -rf /etc/nginx /etc/default/nginx /usr/sbin/nginx /usr/local/nginx /usr/local/sbin/nginx /var/run/nginx.pid /var/log/nginx
$ sudo apt install build-essential zlib1g-dev libpcre3 libpcre3-dev libssl-dev unzip checkinstall

Kurulum

Kurulumu hızlı ve direkt olarak yapmak için alttaki komutu çalıştırın. Bu komut ile direkt olarak stabil en son versiyona ait yükleme gerçekleştirilecektir. Öte yandan farklı bir nginx versiyonu ile birlikte bu yüklemeyi yapmak isterseniz, --nginx-version latest olan kısmı --nginx-version '1.14.2' gibi değiştirebilirsiniz. Tüm sürümlere Github üzerinden ulaşabilirsiniz.

$ bash <(curl -f -L -sS https://ngxpagespeed.com/install) --nginx-version latest

Gelen ilk promptta, alttaki örnek konfigurasyonu yapıştırabilirsiniz. Ancak modüllere dikkat edin, belki sizin ihtiyacınız olup da eksik olan vardır. Devamında çıkan her şeye Y basarak geçebilirsiniz. Alttaki konfigürasyonla, www-data kullanıcısı ve www-data grubunun yönettiği nginx sunucunuz, /usr/sbin/nginx komutu ile yürütülebilecek (execute) olup, pagespeed ile birlikte ssl, gzip, http2 vb. modülleri kapsayacak.

--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_v2_module \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_flv_module \
--with-http_dav_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-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'

Sunucunuzun hızına göre, 5-10 dakika gibi sürede nginx, pagespeed ile birlikte kurulmuş olacak. Eğer derleme esnasında internal compiler error gibi bir hata alırsanız, bilin ki bu memory kaynaklı bir hata, swap'ı aktif etmediyseniz, swap'ı aktif ederek bunu aşabilirsiniz.
Pagespeed Modülü ile Birlikte Nginx Kurulumu

Sunucuda PageSpeed Ayarları

Bir önceki aşamada PageSpeed'i kurmuş olsanız da, kurulum aktif herhangi bir Pagespeed ayarı ile gelmemektedir. PageSpeed ayarlarını sizin nginx sunucu bloğunda özel olarak belirtmeniz gerekmektedir.

$ nano /etc/nginx/nginx.conf

Örnek olması için benim tercih ettiğim ayarları, ne yaptıkları ile birlikte altta yazdım, daha detaylı incelemek için pagespeed dökümantasyonunu inceleyebilirsiniz.

http {
server {
listen 80;
server_name siteniz.com;

pagespeed on;
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 make_google_analytics_async; # Google Analitik isteğini asenkron işler
pagespeed EnableFilters lazyload_images; # Tüm resimleri direkt olarak yüklemektense, yüklemesi gerektiği sayfa kısmı için yükler
pagespeed EnableFilters rewrite_images; # Resimleri optimum şekilde düzenler, resimleri sıkıştırıp, gerekli boyutlara boyutlarını indirger, yüksek RAM ihtiyacı bulunmaktadır. (inline_images, recompress_images, convert_to_webp_lossless ve resize_images modüllerini kapsamaktadır.)

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

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

Konfigürasyonu 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

Burada anlattıklarımdan çok farklı bir şey yapmadım, bu siteye masaüstünde pagespeed insights 100/100 puan veriyor, eğer hıza önem veriyorsanız, ki vermelisiniz, PageSpeed kurmaktan çekinmeyin.

Ekstra Notlar

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.