Cara Setting Server Block Nginx CentOS 6 VPS

cara setting server block nginx centos

Server Block atau jika di Apache Server dikenal dengan Virtual Host. Dengan Server Block maka VPS bisa untuk melayani banyak domain dan keuntungan lain sebagai blogger pemula tentu ini juga akan menghemat pengeluaran daripada menyewa space lagi untuk domain yang lain. Pada kesempatan ini ane coba share bagaimana cara setting server block pada server nginx di CentOS VPS atau Virtual Host kemudian sebagai contoh ane sertakan konfigurasi untuk website yang menggunakan CMS WordPress. Tutorial ini cocok banget gan buat pemula yang ingin belajar lebih jauh tentang VPS khususnya yang menggunakan system Linux CentOS 6 dan Nginx.

Spesifikasi VPS ane:

CPU Core 1
RAM 512MB
Swap 256MB
50 GB HDD
2 TB Transfer
IPv4 1
IPv6 1
Port speed 1Gbps
Lokasi Los Angeles USA
Provider: Enzu / BudgetVM
Harganya : $25/year
Ane pakai untuk ngehost 3 domain.
Kalo agan pengen Order silahkan via ref ane aja Order Disini gan ya itung-itung amal gan 🙂

Oke berikut tutorial cara setting Server Block Nginx di CentOS 6 VPS:

Add Repository EPEL

Pertama tambahkan repo dari epel. Berikut cara untuk menambahkan epel repository, disesuaikan dengan versi Linux CentOS yang digunakan:

RHEL/CentOS 6 32-Bit

wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Untuk RHEL/CentOS 6 64-Bit

wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Remove HTTPD

Defaultnya CentOS telah terinstall HTTPD Server, karena kita akan pakai Nginx maka HTTPD tidak diperlukan lagi untuk itu Stop dan Remove dulu HTTPD bawaan OS, biar nantinya nggak konflik. Caranya dengan command berikut:

service httpd stop
yum remove httpd

Install Nginx

Selanjutnya install nginx kemudian menjalankan nginx dan test menggunakan browser.

yum install nginx -y

Start Nginx service

service nginx start

Buka browser coba buka IP VPS, hasilnya kira-kira seperti ini:

cara install nginx di centos

Otomatis start nginx ketika sistem direboot dengan command berikut.

chkconfig --levels 235 nginx on

Install MySQL

Install MySQL dengan kode berikut:

yum -y install mysql mysql-server

Buat agar MySQL Service otomatis berjalan ketika system reboot:

chkconfig --levels 235 mysqld on

Start MySQL dengan command line berikut

/etc/init.d/mysqld start

Setup security MySQL, ketik kode berikut dan ikuti langkah demi langkah.

mysql_secure_installation

Ketika diminta untuk memasukkan password pertama kali abaikan saja, langsung tekan Enter.

Kemudian Jika ada pertanyaan membuat password pilih Y kemudian enter dan ketik password yang anda inginkan. Pertanyaan selanjutnya jawab dengan Y kemudian Enter sampai instalasi selesai / berhasil:

Install PHP

Langkah selanjutnya menginstall PHP. Kode berikut akan otomatis menginstall php-fpm dan php-mysql

yum -y install php-fpm php-mysql

Kemudian PHP Module, Module berikut ini yang biasa ane install karena kadang-kadang saya butuh ngegrab website menggunakan CURL, seperti layanan API Flickr photo, Youtube API dan ngegrab website lain yang mengharuskan menggunakan module PHP SOAP. Module-module PHP ini termasuk module yang sering diinstall oleh banyak web developer. Namun jika anda tidak membutuhkannya bisa melewati langkah ini:

yum -y install 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

Install APC untuk chacing dan mengoptimalkan kinerja script php. Lebih jauh tentang PHP PECL APC Baca di situs resmi.

yum -y install php-pecl-apc

Load PHP-FPM saat sistem reboot.

chkconfig php-fpm --levels 235 on

Edit konfig php.ini

vi /etc/php.ini

Cari line berikut, hilangkan tanda komen # dan ubah valuenya seperti berikut:

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

Konfigurasi

Langkah selanjutnya adalah berkutat dengan file konfig. Nah file-file untuk konfigurasi Nginx server block dan juga PHP-FPM adalah adalah sebagai berikut, ane urutkan biar mudah agan mencarinya:

  1. /etc/nginx/nginx.conf
  2. /etc/nginx/sites-available/*.conf
  3. /etc/php-fpm.d/www.conf

Konfigurasi Nginx.conf

Perhatikan pada bagian yang berwarna merah, include /etc/nginx/sites-enabled/*; Nah ini untuk membaca semua file *.conf (konfigurasi) yang ada di direktori /etc/nginx/sites-enabled/ untuk tiap domain yang nge-host di VPS agan nantinya.

# FIle ini letaknya di /etc/nginx/nginx.conf
# 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;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

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 perfoma nginx terbaik
    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;


    # Meload konfigurasi dari direktory sites-enabled
    include /etc/nginx/sites-enabled/*;

}

Konfigurasi Nginx Virtual Host

Kita akan membuat sebuah direktori baru didalam /etc/nginx/ yaitu direktori sites-available dan sites-enabled.

mkdir /etc/nginx/sites-{available,sites-enabled}

Kemudian Buat sebuah file baru didalam folder /etc/nginx/sites-available/ untuk setting konfigurasi domain yang ingin ditambahkan di VPS agan. misalnya domain: google.com, maka buat file dengan nama google.com.conf.

vi /etc/nginx/sites-available/google.com.conf

Jika agan menggunakan CMS WordPress setingan ini yang biasa ane pakai jadi agan bisa langsung copy-paste code berikut, tinggal ganti nama domain sesuai dengan domain agan.

# letaknya di : /etc/nginx/sites-available/google.com.conf
server {
        listen 80;
        server_name www.google.com;
        rewrite ^(.*) http://google.com$1 permanent;
}

server {
        listen 80;
        server_name google.com;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/google.com-access;
        error_log /var/log/nginx/google.com-error error;

        root /var/www/html/google.com/;
        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; }
        #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/website.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;
        }
}

Berdasarkan settingan diatas, berarti semua data domain google.com nantinya akan akan berada pada /var/www/html/google.com/.

Selanjutnya buat juga file konfigurasi untuk domain yang lain, caranya sama seperti langkah sebelumnya, misalnya saja domain google.net
Buat file google.net.conf di /etc/nginx/sites-available/

vi /etc/nginx/sites-available/google.net.conf

Kemudian copy-paste kode berikut dan sesuaikan dengan nama domain agan.

# letaknya di : /etc/nginx/sites-available/google.net.conf
server {
        listen 80;
        server_name www.google.net;
        rewrite ^(.*) http://google.net$1 permanent;
}

server {
        listen 80;
        server_name google.net;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/google.net-access;
        error_log /var/log/nginx/google.net-error error;

        root /var/www/html/google.net/;
        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; }
        #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/website.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;
        }
}

Mengaktifkan Virtual Host Direktif

Masuk ke direktori /etc/nginx/sites-enabled/ dimana kita akan membuat link konfigurasi dari file-file *.conf yang ada di folder /etc/nginx/sites-available/.

cd /etc/nginx/sites-enabled

Selanjutnya membuat link ke file yang ada di folder /etc/nginx/sites-available/.

ln -s /etc/sites-available/google.com.conf
ln -s /etc/sites-available/google.net.conf

Jika kelak agan ingin mengedit file konfigurasi virtual host, cukup dengan mengedit file yang ada di /etc/nginx/sites-available/, maka file konfigurasi yang ada di sites-enabled otomatis akan mengikuti update.

Konfigurasi PHP-FPM

Selanjutnya adalah mengedit file konfigurasi php-fpm letaknya ada di /etc/php-fpm.d/www.conf. Untuk jaga-jaga sebaiknya backup dulu file tersebut dengan cara me-rename menjadi file www.conf.bak:

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

Jika sudah dibakcup kemudian kita buat lagi, copy-paste kode berikut:

; letakknya di /etc/php-fpm.d/www.conf ini konfig default untuk nginx
[website]
listen = /var/run/website.socket
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/website.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/website-error.log
php_admin_flag[log_errors] = on

Oke dah.. Selesai gan sekarang waktunya test. Restart service nginx dan php-fpm

restart service nginx
restart service php-fpm

Nah Sekarang VPS agan siap untuk menampung website-website agan, Langkah selanjutnya adalah agan tinggal mengarahkan domain-domain agan ke IP VPS. Selamat mencoba dan good luck gan!

4 thoughts on “Cara Setting Server Block Nginx CentOS 6 VPS

  • Mas, kalau mau setting email domain sendiri di vps bisa tidak ya? Jadi akses emailnya bisa unlimitted dan cepat, karena sekarang sy menggunakan email domain sendiri menggunakan cpanel shared hosting,, jadi kirim dan terima email sering tertunda.

    Terima kasih

Leave a Reply

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