Beberapa hari yang lalu saya membeli NAT vps dari 8Labs.id, rencananya mau dipergunakan menghosting blog yang mempergunakan Wordpress, TheLounge, ZNC, dan juga aplikasi lainnya.
Installasi cloudflared
Berikut langkah instalasi cloudflared di Debian 11 :
curl -fsSL https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/
Login ke tunnel Cloudflare :
cloudflared tunnel login
Nanti akan muncul link di terminal/shell untuk login ke Cloudflare, silakan select link tadi, lalu paste kan di browser, bebas mau memakai Chrome/Edge/Brave/lainnya.

Di browser akan muncul tampilan seperti diatas, namun kita hanya bisa memilih satu domain saja.
Silakan diklik domainnya, nanti akan muncul jendela konfirmasi.
Setelah selesai, kita akan mendapatkan file cert.pem di /root/.cloudflared/cert.pem
Tambahkan Tunnel
Tambahkan tunnel dengan nama-tunnel yang mudah diingat, misalnya saya membuat tunnel dengan id erawan
sudo cloudflared tunnel create nama-tunnel
Misal kita membuat tunnel untuk domain erawan, maka perintahnya seperti dibawah ini
sudo cloudflared tunnel create erawan
Tunnel credentials written to /root/.cloudflared/cxx-xxx-xxx-xxx-xxx.json. cloudflared chose this file based on where your origin certificate was found. Keep this file secret. To revoke these credentials, delete the tunnel.
Created tunnel erawan with id cxx-xxx-xxx-xxx-xxxNah, nanti tunnel dengan id cxx-xxx-xxx-xxx-xxx yang akan muncul sebagai CNAME di Cloudflare.
Kalau mau membuat tunnel dengan nama tunnel znc, tinggal diganti perintahnya menjadi cloudflared tunnel create znc.
Tambahkan routing dns
sudo -u cloudflared cloudflared tunnel route dns nama-tunnel CNAME
Misal nama tunnel saya adalah erawan, dan CNAME yang diperlukan adalah @ dan www, maka kita bisa menjalankan perintah berikut ini
sudo -u cloudflared cloudflared tunnel route dns erawan erawanarifnugroho.com
sudo -u cloudflared cloudflared tunnel route dns erawan www.erawanarifnugroho.com
Added CNAME erawanarifnugroho.com -> cxxx-xxx.cfargotunnel.com
Added CNAME www.erawanarifnugroho.com -> cxxx-xxx.cfargotunnel.comSetelah melakukan perintah tadi, maka di /root/.cloudflared akan muncul file ini :
ls /root/.cloudflared
cxx-xxx-xxx-xxx-xxx.json
cert.pemCopykan dua file tadi ke /etc/cloudflared/, atau buat direktorynya jika belum ada
mkdir -p /etc/cloudflared/
cp /root/.clouflared/* /etc/cloudflared/
ls /etc/cloudflaredJalankan dulu secara manual untuk mengujinya
cloudflared tunnel run erawan
Buat file konfigurasi cloudflared
Supaya cloudflare bisa berjalan, dia perlu file konfigurasi dengan nama .yml, dengan contoh seperti ini
nano /etc/cloudflared/config.yml
tunnel: erawan
credentials-file: /etc/cloudflared/cxx-xxx-xxx-xxx-xxx.json
ingress:
- hostname: erawanarifnugroho.com
service: http://127.0.0.1:80
originRequest:
noTLSVerify: true
headers:
X-Forwarded-Proto: https
- hostname: www.erawanarifnugroho.com
service: http://127.0.0.1:80
originRequest:
noTLSVerify: true
headers:
X-Forwarded-Proto: https
- hostname: chat.erawanarifnugroho.com
service: http://127.0.0.1:9000
- hostname: video.erawanarifnugroho.com
service: tcp://127.0.0.1:5900
- service: http_status:404Akan muncul pertanyaan, mengapa memakai http dan bukan https?
Dan juga mengapa memakai port 80 dan bukan 443?
Karena vps melayani semuanya secara normal melalui http, dan fungsi enkripsi atau terminasi SSL sudah dilakukan oleh Cloudflare melalui cloudflared.
Kalau sudah, masuk ke web Cloudflare, dan seting SSL di Cloudflare ke Full, bukan Flexible.


- Dari Cloudflare, pilih domain, pilih menu SSL/TLS-Overview, klik Configure
- Pilih Custom SSL/TLS, pilih Full, lalu Save.
Di contoh konfigurasi config.yml tadi, kita bisa menambahkan service ingress sebanyak apapun, tinggal menyesuaikan port aplikasi yang berjalan, dengan ketentuan service dengan port tcp selalu berada dibawah http.
Install cloudflared daemon
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl restart cloudflaredSekarang coba akses web atau aplikasi anda, seharusnya sudah bisa diakses.
Konfigurasi Caddy
Karena saya mempergunakan Caddy dan Wordpress, maka ada perlu beberapa perubahan (memerlukan waktu lama untuk mencari masalah dan melakukan perbaikan ini).
Problemnya muncul ketika membuka halaman wp-admin, yang selalu redirect terus menerus.
Berikut adalah contoh file /etc/caddy/Caddyfile, dengan memaksa agar domain wordpress berjalan melalui http.
{
auto_https off # kita matikan automatic https
email erawan@arsip.my.id
log {
output file /var/log/caddy/access.log
level INFO
}
}
# Caddy mendengarkan pada interface dan port yang disetel di Cloudflared
# Disini kita memakai http, supaya tidak automatis ke https
# Secara default caddy akan memproses ke https
http://erawanarifnugroho.com, http://www.erawanarifnugroho.com {
log {
output file /var/log/caddy/blog.log
level INFO
}
# ROOT WordPress
root * /home/erawanarifnugroho.com
# PHP-FPM
php_fastcgi unix//var/run/php/php8.4-fpm.sock
# Rewrite Rules WordPress
try_files {path} {path}/ /index.php?{query}
file_server
encode zstd
header {
# Hapus header server
-Server
}
}Konfigurasi php-fpm
Berikut ini adalah contoh isi /etc/php/8.4/fpm/poold/www.conf
[www]
user = www-data
group = www-data
listen = /var/run/php/php8.4-fpm.sock
; sesuaikan listen portnya dengan setingan di Caddy
Konfigurasi wp-config.php
Berikut ini adalah contoh tambahan di file wp-config.php
<?php
// 1. Hardcode Domain (Wajib)
define('WP_HOME', 'https://erawanarifnugroho.com');
define('WP_SITEURL', 'https://erawanarifnugroho.com');
// 2. Paksa SSL untuk Area Admin dan Login (Wajib untuk wp-admin)
define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);
// 3. Override Server Variables (Wajib untuk Reverse Proxy)
if (
(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') ||
(isset($_SERVER['HTTP_CF_VISITOR']) && strpos($_SERVER['HTTP_CF_VISITOR'], 'https') !== false) ||
(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
) {
$_SERVER['HTTPS'] = 'on';
// PENTING: Menyetel SERVER_PORT ke 443 seringkali mengatasi loop terakhir
$_SERVER['SERVER_PORT'] = 443;
}
// 4. Set Remote IP
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $list[0];
}
/**
* The base configuration for WordPress
Dengan memakai konfigurasi seperti diatas, Wordpress dapat diakses melalui https, halaman wp-admin dapat berjalan normal tanpa masalah redirect.