Beberapa hari yang lalu saya melakukan migrasi blog dari yang semula di shared hosting, saya pindahkan ke VPS di Vultr.
Tulisan saya kali ini akan membahas mengenai cara install nginx untuk multiple website di Vultr.
Untuk mengikuti tutorial ini, setidaknya kamu harus punya pengalaman menggunakan Linux ya. Jika belum, jangan khawatir karena dengan membaca tulisan ini, kamu bisa mendapatkan wawasan lebih luas tentang server dan Linux.
Apa itu VPS?
VPS adalah singkatan dari Virtual Private Server. Berbeda dengan hosting yang biasa, VPS memiliki kelebihan tersendiri.
Jika kita menggunakan VPS, maka resource server yang kita sewa adalah pure digunakan untuk kita sendiri. Hal ini berbeda dengan web hosting biasa yang merupakan shared hosting.
Ketika kita menyewa web hosting, sebenarnya server hosting tersebut dipakai beramai-ramai bersamaan dengan banyak website lain. Hal ini akan berpengaruh pada performa yang akan kita dapatkan.
Jika kamu merasa website-mu sudah mulai melambat seiring dengan bertambahnya pengunjung, maka solusinya adalah dengan menggunakan VPS.
Kelebihan Menggunakan VPS
Dari penjelasan singkat di atas, tentunya sudah terlihat kan kelebihan dari menggunakan VPS.
Lalu apa saja kelebihan lainnya? Berikut ini adalah beberapa kelebihan dari menggunakan VPS
- Uptime yang sangat tinggi.
- Bebas memilih resource CPU/Disk/Memory.
- Backup otomatis.
- Adanya fitur snapshot.
- Bebas memilih lokasi server.
- Instalasi (provisioning) server yang sangat cepat, hanya dalam hitungan menit.
- Mendapatkan akses root dari server .
- Bayar dari apa yang kita gunakan (pay as you use).
Kekurangan Menggunakan VPS
Selain kelebihan, tentunya selalu ada kekurangan yang harus menjadi perhatian kita semua.
Berikut ini adalah kekurangan menggunakan VPS.
- Membutuhkan kemampuan/skill yang lebih dalam mengelola VPS.
- Biaya yang relatif lebih mahal.
Sebenarnya, kekurangan ini bisa dengan mudah diatasi jika kamu punya budget berlebih.
Apa itu Vultr?
Vultr adalah salah satu penyedia infrastruktur cloud ternama yang bisa menjadi salah satu opsi kita untuk menyewa VPS.
Vultr sendiri menyediakan beberapa layanan, di antaranya adalah:
- Cloud Compute
- Bare Metal
- Block Storage
- Dedicated Cloud
Tulisan saya kali ini akan banyak membahas tentang Cloud Compute.
Untuk mengikuti tutorial ini, kita harus membuat akun dulu di Vultr ya. Klik aja link ini untuk Sign Up.
Apa itu Nginx?
Nginx adalah salah satu web server yang terkenal karena memiliki performa yang bagus. Nginx sebenarnya tidak hanya memiliki kemampuan sebagai web server, melainkan juga bisa sebagai load balancing, caching, reverse proxy, dan media streaming.
Web server lain yang seringkali digunakan untuk website adalah Apache. Saya akan membahasnya di lain waktu ya.
Cara Install Nginx untuk Multiple Website dan Domain di Vultr
Baik, sekarang saya akan lanjut ke inti tulisan ini, yaitu tentang cara install Nginx untuk multiple website di Vultr dengan Centos 8.
Selamat mengikuti!
Membuat Instance Baru di Vultr
Untuk membuat instance baru di Vultr tidak sulit. Setelah memiliki akun dan login, di menu Products, pada bagian kanan ada tombol plus ( + ) berwarna biru.
Arahkan mouse pada tombol tersebut, kemudian klik Deploy New Instance. Setelah itu, kamu bisa memilih resource yang kamu butuhkan.
Di sini saya menggunakan pilihan sebagai berikut:
- Choose Server: Cloud Compute
- Server Location: Singapore
- Server Type: 64bit OS, Centos 8
- Server Size: 55GB / 1 CPU / 2048 Memory
Setelah itu, Klik Deploy Now. Tunggu beberapa saat sampai server ready.
Selanjutnya, saya asumsikan kamu sudah punya instance baru di Vultr ya. Pada tutorial ini saya menggunakan Centos 8 dengan resource 1 CPU dan RAM 2GB.
Apa yang Akan Kita Lakukan?
Sesuai judul dari tulisan ini, kita akan membuat dua buah website yang akan dihandle oleh Nginx.
Untuk memudahkan tutorial ini, saya beri nama website tersebut adalah website1.com dan website2.com
Hasil akhir dari tutorial ini adalah, kamu dapat mengakses kedua website tersebut.
Saya mengasumsikan website1.com dan website2.com sudah di setting nameserver nya.
Setting nameserver dilakukan supaya domain yang kita punya sudah mengarah ke server yang akan kita install.
Jika kamu kesulitan melakukan konfigurasi nameserver. Silahkan baca tulisan saya tentang setting nameserver di sini:
Cara Setting Nameserver di Hawkhost
Setup Nginx dengan Multiple Website/Domain
1. Login ke server menggunakan SSH
Pertama-tama kamu harus login dulu ke VPS yang telah kamu bikin menggunakan SSH. Informasi akses dapat kamu lihat di Vultr.
2. Install Nginx dan Jalankan Service nya
Install Nginx dengan menggunakan command/perintah berikut:
dnf install nginx
Tunggu beberapa saat, setelah selesai, kita harus menyalakan service dari Nginx. Jalankan perintah berikut:
systemctl start nginx
Supaya kita tidak perlu start service setiap kali restart, jalankan perintah di bawah ini:
systemctl enable nginx
3. Setting Firewall untuk HTTP dan HTTPS
Karena website kita akan diakses dari luar server, maka kita perlu melakukan konfigurasi firewall. Caranya, jalankan beberapa baris perintah berikut:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
4. Testing Halaman Default Web Nginx
Setelah menjalankan langkah-langkah di atas, seharusnya kamu sudah bisa melihat halaman berikut ketika mengakses IP VPS mu di browser.

Setelah halaman Welcome to nginx terlihat, kita akan mulai melakukan konfigurasi website untuk Nginx.
5. Membuat User Baru untuk Masing-masing Website
Pertama-tama kita akan membuat user baru untuk masing-masing website. Ini penting dilakukan supaya masing-masing website berjalan dengan user yang berbeda.
Untuk membuat user, gunakan perintah sebagai berikut:
useradd website1
useradd website2
Jika kamu perhatikan, maka akan muncul direktori baru yaitu di /home/website1 dan /home/website2
Kedua user ini, tidak perlu kita set password, kecuali kalau kita akan membuat akses FTP nya.
6. Menyiapkan public_html untuk Website
Selanjutnya, kita akan membuat folder public_html untuk kedua website tersebut. Folder ini ditujukan untuk menaruh source code website yang kita punya.
Jalankan perintah berikut untuk membuat folder public_html
mkdir -p /home/website1/public_html
mkdir -p /home/website2/public_html
Jangan lupa untuk mengubah owner dari folder tersebut sesuai dengan pemilik nya masing-masing.
chown website1:website1 /home/website1/public_html
chown website2:website2 /home/website2/public_html
7. Instalasi PHP dan PHP-FPM
Pada tahap ini kita akan menginstall PHP dan PHP-FPM. Untuk menginstall nya, gunakan perintah berikut ini:
dnf install php php-fpm php-gd php-mysqlnd
Setelah itu, jangan lupa untuk start service dari PHP-FPM. Termasuk juga enable autostart setelah booting server
systemctl start php-fpm
systemctl enable php-fpm
8. Konfigurasi Pool PHP-FPM
Secara default, PHP-FPM memiliki pool yang running dengan nama www. Kita akan membuat pool baru dengan nama sesuai website masing-masing.
vi /etc/php-fpm.d/website1.conf
Kemudian isikan konfigurasi seperti di bawah ini:
[website1] user = website1 group = website1 listen = /run/php-fpm/website1.sock listen.owner = website1 listen.group = website1 listen.allowed_clients = 127.0.0.1 listen.mode = 0666 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 chdir = /
Ulangi langkah yang sama untuk website2.conf
Setelah itu, kita restart service PHP-FPM dengan perintah:
systemctl restart php-fpm
Terakhir untuk PHP-FPM, kita cek status nya, pastikan outputnya mirip seperti di bawah ini.
[[email protected] ~]# systemctl status php-fpm
● php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2020-05-30 09:38:05 WIB; 6 days ago
Main PID: 8369 (php-fpm)
Status: "Processes active: 0, idle: 14, Requests: 64205, slow: 0, Traffic: 0.1req/sec"
Tasks: 15 (limit: 11519)
Memory: 367.3M
CGroup: /system.slice/php-fpm.service
├─ 1522 php-fpm: pool website1
├─ 1586 php-fpm: pool website1
├─ 3981 php-fpm: pool website1
├─ 8369 php-fpm: master process (/etc/php-fpm.conf)
├─ 8377 php-fpm: pool www
├─ 8378 php-fpm: pool www
├─ 8379 php-fpm: pool www
├─ 8380 php-fpm: pool www
├─ 8381 php-fpm: pool www
├─14444 php-fpm: pool website2
├─14446 php-fpm: pool website2
9. Konfigurasi Nginx untuk Masing-masing Website
Lanjut ke tahap selanjutnya, kita akan melakukan konfigurasi Nginx. Seperti pada PHP-FPM, kita juga akan membuat file konfigurasi khusus untuk masing-masing website.
Buat file konfigurasi baru:
vim /etc/nginx/conf.d/website1.conf
Isikan konfigurasi seperti di bawah ini:
server { listen 80; root /home/website1/public_html; index index.php index.html index.htm; server_name website1.com; client_max_body_size 100M; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass unix:/run/php-fpm/website1.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
Ulangi hal yang sama untuk website2.conf
Setelah itu, kamu bisa test konfigurasi nginx dengan mengetikkan perintah:
nginx -t
Jika output nya seperti di bawah ini, maka file konfigurasi tersebut sudah benar (tidak ada typo)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Restart Nginx dengan perintah:
systemctl restart nginx
Untuk mengecek status Nginx, kamu bisa mengetikkan perintah:
systemctl status nginx
Jika output yang kamu dapatkan adalah “running“, seperti di bawah ini, maka langkah yang kamu lakukan sudah benar.
[[email protected] ~]# systemctl status nginx ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/nginx.service.d └─php-fpm.conf Active: active (running) since Sat 2020-05-30 09:38:05 WIB; 6 days ago Process: 8360 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS) Process: 8357 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 8355 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS) Main PID: 8362 (nginx) Tasks: 2 (limit: 11519) Memory: 134.2M CGroup: /system.slice/nginx.service ├─2614 nginx: worker process └─8362 nginx: master process /usr/sbin/nginx
10. Testing Website
Setelah menyelesaikan konfigurasi di atas, hal terakhir yang kamu lakukan adalah melakukan pengujian / testing.
Kamu bisa membuat file script PHP sederhana, misalnya:
<?php echo 'Website 1'; ?>
Simpan di lokasi /home/website1/public_html/index.php untuk website1.com
Pastikan file ownernya sudah diubah menjadi website1 ya (karena kamu login menggunakan root).
Lakukan juga untuk website2.com
Jika sudah, cobalah akses website1.com dan website2.com dari browser mu.

Jika yang tampil seperti diatas, maka selamat! Kamu berhasil melakukan install Nginx untuk multiple website.
Install Certificate HTTPS di Nginx
Setelah berhasil melakukan konfigurasi Nginx di atas, tentunya masih ada yang kurang karena website ini belum memiliki sertifikat HTTPS / SSL.
Di tahun 2020 ini, HTTPS adalah hal yang wajib dipasang. Oleh karena itu selanjutnya kita akan menginstall certificate HTTPS di Nginx.
Pada tutorial ini, saya menggunakan certificate dari Let’s Encrypt. Selain gratis, untuk memasang certificate ini juga dimudahkan dengan adanya Certbot Client.
Certbot adalah sebuah aplikasi yang memudahkan kita untuk menginstall Let’s Encrypt. Untuk menginstallnya terlebih dahulu jalankan perintah berikut:
curl -O https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin
chmod 755 /usr/local/bin/certbot-auto
Untuk menjalankan certbot, gunakan perintah berikut:
/usr/local/bin/certbot-auto --nginx
Secara otomatis certbot akan menampilkan daftar domain yang ada di konfigurasi Nginx. Kita dapat memilih pada domain mana kita akan menginstall SSL
Jika instalasi berhasil, jangan lupa untuk merefresh halaman testing yang telah kita buat di atas. Seharusnya kamu akan menemukan bahwa website tersebut sudah terinstall SSL.
Hebatnya, certbot client ternyata secara otomatis menambahkan konfigurasi SSL pada /etc/nginx/conf.d/
Suatu saat jika SSL kita expired, kita diharuskan untuk melakukan renew. Untuk melakukan renew certificate, kita bisa menjalankan perintah berikut:
/usr/local/bin/certbot-auto renew
Demikian tutorial tentang cara install nginx di Centos 8. Jika kamu mengalami kesulitan, feel free untuk bertanya di komentar ya!