Membuat Template Konfigurasi Nginx di HestiaCP untuk Forward Port
Pendahuluan
HestiaCP (https://hestiacp.com/) adalah salah satu control panel gratis dan open source yang sering digunakan untuk mengelola web server berbasis Nginx dan Apache. Namun, secara default, HestiaCP tidak menyediakan opsi untuk mengubah konfigurasi port dengan fleksibel melalui user interface-nya.
☐ Buat template untuk HTTP
☐ Buat template untuk HTTPS
Port Forwarding pakai Nginx
Pada template default, Nginx menerima request dari port 80 dan 443, namun hanya sebagai proxy yang:
- mengarahkan ke static resource secara langsung dan
- mengarahkan sisanya ke Apache (default berjalan di port 8080) untuk selain static resource.
Sayangnya, kita tidak bisa mengatur port forwarding dengan mudah karena opsi tersebut belum tersedia di user interface HestiaCP. Padahal ini sangat sering dilakukan menggunakan Nginx.
Solusinya, kita perlu membuat template konfigurasi baru, spesifik untuk settingan port forwarding yang kita perlukan.
Dalam catatan ini, kita akan coba melakukan port forwarding berikut:
- Port 443 (HTTPS) diarahkan ke port 18880
- Port 80 (HTTP) diarahkan ke port 18880
Langkah-Langkah Membuat Template Konfigurasi Nginx di HestiaCP
1️. Masuk ke Server dan Buat Template Baru
Pertama, kita perlu masuk ke server melalui dan membuat template baru di dalam direktori konfigurasi HestiaCP.
cd /usr/local/hestia/data/templates/web/nginx/
Biasanya, di dalamnya sudah ada beberapa file template bawaan, termasuk default.tpl
dan default.stpl
.
File dengan ekstensi *.tpl
digunakan untuk konfigurasi website dengan http.
File dengan ekstensi *.stpl
digunakan untuk konfigurasi website dengan https.
2️. Buat File Template untuk HTTP (Port 80)
Buat file template untuk port 80:
cp default.tpl custom.tpl
nano custom.tpl
Ubah isinya dengan:
server {
listen %ip%:%proxy_port%;
server_name %domain_idn% %alias_idn%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
# Blokir akses ke file tersembunyi (yang nama file diawali dengan .)
location ~ /\.(?!well-known\/|file) {
deny all;
return 404;
}
location / {
proxy_pass http://%ip%:18000; # Pastikan port sudah sesuai
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
include %home%/%user%/conf/web/%domain%/nginx.conf_*;
}
Lalu, simpan (CTRL+X
, Y
, Enter
).
Catatan:
listen %ip%:%proxy_port%;
→ Nginx akan mendengarkan koneksi pada IP dan port yang ditentukan oleh variabel%ip%
dan%proxy_port%
.- Variabel
%ip%
akan otomatis diisikan alamat IP server oleh HestiaCP. - Variable
%proxy_port%
akan otomatis diisikan port yang akan digunakan oleh Nginx untuk serve web. Diisi otomatis oleh HestiaCP, default: port80
. - Silahkan cek reference note ini untuk melihat variabel lainnya.
- Variabel
server_name %domain_idn% %alias_idn%;
→ Menentukan nama domain utama (%domain_idn%
) dan alias (%alias_idn%
) yang di-handle oleh konfigurasi ini. HestiaCP akan otomatis mengisikan%domain_idn%
dan%alias_idn%
dengan domain yang diatur pada interface HestiaCP.proxy_pass http://%ip%:18000;
→ mengarahkan request ke backend yang berjalan di port 18000.
3️. Buat File Template untuk HTTPS (Port 443)
Buat file template untuk port 443:
cp default.stpl custom.stpl
nano custom.stpl
Isi dengan:
server {
listen %ip%:%proxy_ssl_port% ssl;
server_name %domain_idn% %alias_idn%;
error_log /var/log/%web_system%/domains/%domain%.error.log error;
ssl_certificate %ssl_pem%;
ssl_certificate_key %ssl_key%;
ssl_stapling on;
ssl_stapling_verify on;
# TLS 1.3 0-RTT anti-replay
if ($anti_replay = 307) { return 307 https://$host$request_uri; }
if ($anti_replay = 425) { return 425; }
# Blokir akses ke file tersembunyi sebelum aturan umum
location ~ /\.(?!well-known\/|file) {
deny all;
return 404;
}
location / {
proxy_pass http://%ip%:18000; # Pastikan port sudah sesuai
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /error/ {
alias %home%/%user%/web/%domain%/document_errors/;
}
include %home%/%user%/conf/web/%domain%/nginx.ssl.conf_*;
}
Lalu, simpan (CTRL+X
, Y
, Enter
).
Catatan:
listen %ip%:%proxy_ssl_port%;
→ Di sini%proxy_ssl_port%
otomatis akan diganti dengan oleh HestiaCP menjadi port untuk SSL (default443
).proxy_pass http://%ip%:18000;
→ mengarahkan request ke backend yang berjalan di port 18000.- SSL di-handle oleh Nginx, backend di port
18000
cukup pakai http saja.
- SSL di-handle oleh Nginx, backend di port
4️. Terapkan Template ke Domain
Template baru sudah berhasil dibuat, namun belum dideteksi oleh HestiaCP. Jalankan perintah ini untuk rebuild system user yang juga akan membaca template baru.
v-rebuild-user admin yes
Perintah ini perlu dijalankan ketika ada update template, agar website menggunakan template terbaru yang telah di-update.
Selanjutnya, buka HestiaCP dan lakukan langkah-langkah berikut:
- Masuk ke Web > Pilih Domain
example.com
(contoh). - Klik Edit
- Ubah Template Web menjadi
custom
- Simpan perubahan (yang otomatis juga melakukan restart nginx)
Apabila hendak menggunakan https, Kamu bisa mengaktifkan opsi untuk request pembuatan sertifikat SSL menggunakan Let's Encrypt.
Setelah ini, apabila ada pesan error (misalnya menyatakan bahwa gagal restart Nginx), maka ada kemungkinan kesalahan pada template.
Konfigurasi selesai diterapkan.
Sekarang, kita perlu memastikan konfigurasi sudah diterapkan dengan benar, example.com
sudah diarahkan ke port 18000.
Untuk memastikan konfigurasi berjalan dengan baik, kita bisa melakukan tes menggunakan curl
:
curl -I http://example.com
Jika output menunjukkan status 200 OK, berarti konfigurasi berjalan dengan benar.
Penutup
Menggunakan template kustom di HestiaCP memberikan kontrol lebih dalam mengatur redirect port. Teknik ini berguna untuk berbagai kebutuhan, seperti menjalankan aplikasi di port non-standar atau menghubungkan layanan internal dengan lebih aman dan fleksibel.
Semoga bermanfaat!