Konfigurasi WordPress, W3 Total Cache, PHP-APC di Nginx

Konfigurasi WordPress, W3 Total Cache, PHP-APC di Nginx

Berikut ini adalah panduan lengkap cara install dan konfigurasi WordPress, W3 Total Cache, PHP-APC di Nginx server untuk performa maksimal web server anda.

Pada tutorial ini, di VPS menggunakan distribusi Linux CentOS 6, dengan contoh konfigurasi untuk satu website saja, tapi jika anda telah menguasai bagaimana cara konfigurasi Server Block atau vhost di Nginx, konfigurasi W3 Total Cache bisa diterapkan dengan cara yang sama.

Install Komponen

Install komponen yang diperlukan untuk membangun website WordPress beserta plugin W3 Total Cache, yaitu: Nginx, MySQL dan PHP seperti langkah-langkah yang telah diurutkan sebagai berikut.

Install Nginx

service httpd stop
yum remove httpd
yum install nginx -y
chkconfig --levels 235 nginx on
service nginx start

Install MySQL

yum -y install mysql mysql-server
mysql_secure_installation

Ikuti proses installasi sampai selesai.

chkconfig --levels 235 mysqld on
service mysqld start

Install PHP

yum -y install php-fpm php-mysql

Install PHP-APC module dan PHP module lainya

yum -y install php-apc php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel

Aktifkan saat boot.

chkconfig --levels 235 php-fpm on
service php-fpm start

Konfigurasi

Langkah selanjutnya adalah konfigurasi-konfigurasi, pada sesi ini telah saya urutkan, jadi anda tinggal mengikuti langkah demi langkah kemudian menyesuaikan file konfig dengan seperti yang dibawah ini.

Konfigurasi php.ini

Buka file /etc/php.d/php.ini

vi /etc/php.d/php.ini

Temukan baris berikut ini dan sesuaikan:

cgi.fix_pathinfo = 0
date.timezone = Asia/Jakarta
expose_php = Off

Konfigurasi php-apc

Buka file konfigurasi php-apc.ini

vi /etc/php.d/apc.ini

Isi dengan baris kode berikut:

extension = apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.num_files_hint=1024
apc.user_entries_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=1M
apc.stat=1
apc.stat_ctime=0
apc.canonicalize=0
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.include_once_override=0
apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

File konfigurasi yang akan kita edit selanjutnya adalah konfig Nginx dan PHP-FPM, sampai disini alangkah baiknya kita bakcup dulu file-file tersebut dengan cara menggunakan command mv atau move file:

mv /etc/nginx/nginx.conf/etc/nginx/nginx.conf.bak
mv /etc/nginx/conf.d/default.conf mv /etc/nginx/conf.d/default.conf.bak
mv /etc/nginx/php-fpm.d/www.conf /etc/nginx/php-fpm.d/www.conf.bak

Konfigurasi Nginx

Buat file baru: /etc/nginx/nginx.conf

vi /etc/nginx/nginx.conf

Copy-paste kode berikut:

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user              nginx;
worker_processes  4;

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

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  30;

    # Untuk maksimalkan performa nginx
    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

    # Me-Load file config dari folder /etc/nginx/conf.d directory
    # pada kasus ini setting default server adalah di /etc/nginx/conf.d/default.conf
    include /etc/nginx/conf.d/*.conf;

}

Konfigurasi Default Server Nginx

Buat file baru

vi /etc/nginx/conf.d/default.conf

Paste kode berikut, cocokkan dengan domain agan

server {
        listen 80;
        server_name www.idnetter.com;
        rewrite ^(.*) http://idnetter.com$1 permanent;
}

server {
        listen 80;
        server_name idnetter.com;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/idnetter-access.log;
        error_log /var/log/nginx/idnetter-error.log crit;
        
        ### Direktori untuk data website
        root /var/www/html/;
        index  index.html index.php;

        ### root directory ###
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        location ~* wp-admin/includes { deny all; }
        location ~* wp-includes/theme-compat/ { deny all; }
        location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
        location /wp-includes/ { internal; }
        ### Ini untuk me-load config W3 Total Cache
        include /var/www/html/w3.conf;
        ### END w3 Total Cache
        location ~* wp-config.php { deny all; }
        location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php)$ {
                types { }
                default_type text/plain;
        }

        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                fastcgi_pass unix:/var/run/php-fpm.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                #Prevent version info leakage
                fastcgi_hide_header X-Powered-By;
        }
}

Konfigurasi PHP-FPM

Buat file baru

vi /etc/php-fpm.d/www.conf

Paste code berikut:

[php-fpm]
listen = /var/run/php-fpm.socket
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/php-fpm.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_admin_value[error_log] = /var/log/php-fpm/php-fpm-error.log
php_admin_flag[log_errors] = on

Buka file /etc/php-fpm.conf

vi /etc/php-fpm.conf

Uncomment pada baris berikut ini:

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10

Konfigurasi WordPress

Buat Database

mysql -u root -p
create database namaDatabaseAnda;
CREATE USER 'UserDatabaseAnda'@'localhost' IDENTIFIED BY '123456';
GRANT ALL ON NamaDatabaseAnda.* TO 'UserDatabaseAnda'@'localhost';
FLUSH PRIVILEGES;
exit

Masuk ke direktori web root

cd /var/www/html

Download script WordPress

wget http://wordpress.org/latest.tar.gz

Extract Script WordPress

tar -xvf latest.tar.gz

Pindah script WordPress ke direktori utama website, yaitu di /var/www/html

cp -r wordpress/* /var/www/html

Hapus folder wordpress

rm -rf wordpress

CHMOD

Mengubah chmod atau perizinan file/folder

chown nginx:nginx -R *

Ubah chmod semua folder menjadi 755

find . -type d -exec chmod 755 {} \;

Ubah chmod semua file menjadi 644

find . -type f -exec chmod 644 {} \;

Install WordPress online melalui browser favorite anda dan ikuti instruksi sampai berhasil seperti biasa.

Setelah berhasil menginstall WordPress, buka file konfigurasi WordPress

vi /var/www/html/wp-config.php

Tambahkan line berikut (sesuaikan dengan domain agan) pada wp-config.php agar WordPress tidak mengambil query dari database.

define('WP_HOME', 'http://idnetter.com');
define('WP_SITEURL', 'http://idnetter.com');

Simpan dan keluar dari vi editor.

Install Plugin W3 Total Cache

Install Plugin W3 Total Cache WordPress dari menu admin seperti biasa

Kemudian setting W3 Total Cache seperti berikut:

Page cache: enabled
Page cache method: Disk: Enhaced

Minify: enable
Minify cache method: Opcode: Alternative PHP Cache (APC)

Database Cache: enabled
Database Cache Method: Opcode: Alternative PHP Cache (APC)

Object Cache: enbabled
Object Cache Method: Opcode: Alternative PHP Cache (APC)

Browser Cache: disabled

Selebihnya anda bisa lihat postingan saya khusus untuk settingan W3 Total Cache di -> Link Ini. Semua settingan sama, hanya saja metode cachenya menggunakan Opcode: Alternative PHP Cache (APC) atau seperti settingan diatas.

Konfigurasi W3 Total Cache Nginx

Buat file baru untuk konfig W3 Total Cache Nginx

vi /var/www/html/w3.conf

Copy-Paste code berikut

# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
    add_header Vary Cookie;
}
# END W3TC Page Cache cache
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
    set $w3tc_rewrite 0;
}
if ($query_string != "") {
    set $w3tc_rewrite 0;
}
if ($request_uri !~ \/$) {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
    set $w3tc_rewrite 0;
}
if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html") {
  set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html" last;
}
# END W3TC Page Cache core

Simpan dan keluar dari vi editor

Check

Restart Nginx dan PHP-FPM

service nginx restart
service php-fpm restart

Check PHP-APC

php -m | grep -w apc

Buka Browser: Login Dashboard WP > Performance > Empty All Caches.
Coba buka website anda dan refresh.

Alhamddulillah Tutorial Konfigurasi WordPress, W3 Total Cache, PHP-APC di Nginx kelar juga, Kini anda bisa membangun website WordPress dengan plugin W3 Total Cache serta konfigurasi untuk performa web server yang maksimal. Met mencoba gan, CMIIW.

Referensi : WordPress, W3-Edge, PHP APC, RoseHosting, Nginx, MySQL, CentOS

 

2 thoughts on “Konfigurasi WordPress, W3 Total Cache, PHP-APC di Nginx

Leave a Reply

Your email address will not be published. Required fields are marked *