in Computer & Networking, Others

Meningkatkan Performa Ghost CMS dengan Optimasi pada Nginx

Seperti yang sebelumnya dibahas disini, mengenai instalasi Ghost CMS pada Ubuntu dengan menggunakan Nginx web server. Kali ini kita bahas bagaimana untuk optimasi pada Nginx untuk meningkatkan performa Ghost CMS.

“Don’t use #nodejs for static content” – @trevnorris. If #nginx isn’t sitting in front of your node server, you’re probably doing it wrong. — Bryan Hughes (@nebrius) August 30, 2014

Langkah pertama yang dilakukan untuk melakukan optimasi pada Nginx adalah, memberitahu Nginx pada port berapa Ghost berjalan. Mendefinisikan upstream di dalam konfigurasi virtual host domain anda.

upstream ghost_upstream {    server 127.0.0.1:2368;    keepalive 64;}

Konfigurasi diatas digunakan untuk memberitahu Nginx bahwa Ghost berjalan pada 127.0.0.1:2368 dan menentukan koneksi selama 64 detik untuk menghindari permintaan konek kembali apabila ada permintaan baru.

💡
Perhatikan penggunaan port pada seting di Nginx harus sama dengan seting port pada Ghost.

Proxy Cache

Digunakan untuk men-cache semua respon dari Ghost sehingga bisa menghindari akses proxy ke aplikasi setiap kali ada permintaan. Langkah pertama untuk melakukan ini adalah menentukan proxy_cache_path, masukkan setingan ini pada nginx.conf.

http {	...	proxy_cache_path /var/run/cache levels=1:2 keys_zone=WONGAKU:50m inactive=10h max_size=512m;	...}

Konfigurasi di atas menentukan zona sebesar 50 megabyte dan akan menghapus file setelah 10 jam jika tidak ada lagi permintaan.

Server Block

Sekarang kita memulai mengkonfigurasi untuk domain yang melayani Ghost.

Blok lokasi untuk halaman :

Di konfigurasi berikut akan men-cache respon 200 selama 30 menit dan respon 404 selama 1 menit dari proxy_cache yang telah kita seting di atas, contoh disini adalah WONGAKU. Kita juga akan mengabaikan atau menyembunyikan beberapa headers yang dibuat Ghost semenjak kita membuatnya sendiri. Selain itu kita akan men-cache halaman di browser untuk 10 menit, expires 10m;

location / {        proxy_cache WONGAKU;        proxy_cache_valid 200 30m;        proxy_cache_valid 404 1m;        proxy_pass http://ghost_upstream;        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;        proxy_ignore_headers Set-Cookie;        proxy_hide_header Set-Cookie;        proxy_hide_header X-powered-by;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header Host $http_host;        expires 10m;    }

Juga akan berguna untuk menambahkan perintah ke permintaan halaman untuk memberitahu apakah permintaan tersebut mengenai Cache Nginx. Hal ini dapat dengan mudah menambahkan  add_header X-Cache $upstream_cache_status;.

Blok lokasi untuk file statik, seperti css, js, dan gambar.

Disini kita akan memberitahu Nginx untuk mencari dimana letak file seperti css, js, dan gambar. Untuk ini, kita memerlukan dua blok lokasi yang ditujukan dimana folder gambar dan folder assets. Kita akan men-cache file-file statik ini dengan opsi expires max; sehingga gambar dan assets akan ter-cache selamanya di browser pengguna.

💡
Peringatan : Ketika anda mengubah tema dari Ghost, maka anda juga harus mengubah pada seting location /assets pada Nginx
location /content/images {        alias /path/ke/ghost/content/images;        access_log off;        expires max;    }location /assets {        alias /path/ke/ghost/content/themes/(theme-name)/assets;        access_log off;        expires max;    }

Blok lokasi untuk interface Ghost Admin

Pada halaman untuk mengelola Ghost sangat dianjutkan untuk tidak di-cache. Lokasi blok ini meliputi halaman backend dan signout.

location ~ ^/(?:ghost|signout) {         proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://ghost_upstream;        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";    }

Konfigurasi HTTP Nginx untuk Ghost

Konfigurasi di bawah merupakan rangkuman dari semua konfigurasi di atas

server {   server_name domain.com;   add_header X-Cache $upstream_cache_status;   location / {        proxy_cache WONGAKU;        proxy_cache_valid 200 30m;        proxy_cache_valid 404 1m;        proxy_pass http://ghost_upstream;        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;        proxy_ignore_headers Set-Cookie;        proxy_hide_header Set-Cookie;        proxy_hide_header X-powered-by;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header Host $http_host;        expires 10m;    }    location /content/images {        alias /path/ke/ghost/content/images;        access_log off;        expires max;    }    location /assets {        alias /path/ke/ghost/content/themes/uno-master/assets;        access_log off;        expires max;    }    location ~ ^/(?:ghost|signout) {         proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://ghost_upstream;        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";    }    }

Konfigurasi HTTPS Nginx untuk Ghost

Apabila anda ingin menggunakan HTTPS dengan SSL/TLS pada seting server website anda, langkah pertama anda harus mengubah seting URL dalam Ghost pada file config.js.

Pada blok location / sangat penting untuk memasukkan seting proxy_set_header X-Forwarded-Proto https;atau jika tidak memasukkan seting tersebut, website Ghost akan mengalami redirect loop. Hal yang sama masukkan pada blok location ~^/(?:ghost|signout).

server {   server_name wongaku.com;   listen 443 ssl spdy;   spdy_headers_comp 6;   spdy_keepalive_timeout 300;   keepalive_timeout 300;   ssl_certificate_key /etc/nginx/ssl/domain.key;   ssl_certificate /etc/nginx/ssl/domain.crt;   ssl_session_cache shared:SSL:10m;     ssl_session_timeout 24h;              ssl_buffer_size 1400;                 ssl_stapling on;   ssl_stapling_verify on;   ssl_trusted_certificate /etc/nginx/ssl/trust.crt;   resolver 8.8.8.8 8.8.4.4 valid=300s;   add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';   add_header X-Cache $upstream_cache_status;   location / {        proxy_cache WONGAKU;        proxy_cache_valid 200 30m;        proxy_cache_valid 404 1m;        proxy_pass http://ghost_upstream;        proxy_ignore_headers X-Accel-Expires Expires Cache-Control;        proxy_ignore_headers Set-Cookie;        proxy_hide_header Set-Cookie;        proxy_hide_header X-powered-by;        proxy_set_header X-Real-IP $remote_addr;        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header X-Forwarded-Proto https;        proxy_set_header Host $http_host;        expires 10m;    }    location /content/images {        alias /path/ke/ghost/content/images;        access_log off;        expires max;    }    location /assets {        alias /path/ke/ghost/themes/uno-master/assets;        access_log off;        expires max;    }    location ~ ^/(?:ghost|signout) {         proxy_set_header X-Real-IP $remote_addr;        proxy_set_header Host $http_host;        proxy_pass http://ghost_upstream;        add_header Cache-Control "no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0";        proxy_set_header X-Forwarded-Proto https;    }}

Demikian konfigurasi dan penjelasan singkat bagaimana untuk meningkatkan performa Ghost dengan optimasi pada Nginx