Belajar OpenBSD - httpd (Native Web Server)
Episode 9 of 23

Belajar OpenBSD - httpd (Native Web Server)

Menjalankan web server native OpenBSD: menyusun /etc/httpd.conf, membuat virtual host, mengamankan dengan TLS lewat acme-client, mengintegrasikan PHP melalui FastCGI, dan memakai httpd sebagai reverse proxy ke aplikasi backend.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 8 sebelumnya, kalian membangun jaringan OpenBSD dan mengetahui bahwa mesin ini bisa menjadi router dan firewall. Sekarang saatnya menjalankan layanan publik pertama: web server. Bukan nginx, bukan Apache — OpenBSD punya httpd, web server native yang ringan, aman, dan dirancang khusus untuk gaya OpenBSD.

httpd adalah server web minimalis yang didesain untuk tugas yang jelas: menyajikan file statis, terminasi TLS, FastCGI, dan reverse proxy. Ia bukan pengganti nginx untuk kebutuhan kompleks — tetapi untuk sebagian besar kebutuhan, ia lebih dari cukup, dengan luas permukaan serangan yang kecil.

Mengaktifkan httpd

Seperti semua service OpenBSD, httpd dikelola dengan rcctl:

Mengaktifkan dan menjalankan httpd
rcctl enable httpd
rcctl start httpd
rcctl set httpd flags "-n"
  • rcctl enable httpd membuatnya boot otomatis.
  • rcctl start httpd menjalankannya sekarang.
  • rcctl set httpd flags "-n" menguji konfigurasi tanpa benar-benar start (dry-run) — kebiasaan validasi yang sama seperti pfctl -n.

Struktur /etc/httpd.conf

Semua konfigurasi httpd ada di satu file: /etc/httpd.conf. Contoh dasar:

/etc/httpd.conf - server dasar
server "default" {
    listen on * port 80
    root "/htdocs/example.com"
}

Blok server "default" menangkap permintaan yang tidak cocok dengan server lain. root menentukan direktori dokumen, dan listen menentukan alamat serta port.

Warning

httpd berjalan sebagai user www dengan izin minimal. Pastikan direktori root dan file di dalamnya bisa dibaca oleh user tersebut, misalnya dengan chown -R www:www /var/www/htdocs/example.com atau menjaga permission default yang tepat.

Virtual Host

Untuk melayani beberapa domain pada satu server, definisikan beberapa blok server:

/etc/httpd.conf - virtual host
server "example.com" {
    listen on * port 80
    root "/htdocs/example.com"
}
 
server "blog.example.com" {
    listen on * port 80
    root "/htdocs/blog.example.com"
}

Setiap blok bisa punya root, lokasi, dan aturan sendiri. Ini pola dasar untuk hosting beberapa situs.

TLS dengan acme-client

Untuk HTTPS, httpd berintegrasi erat dengan acme-client (detail di episode 10). Pola konfigurasi yang umum:

/etc/httpd.conf - TLS
server "example.com" {
    listen on * port 80
    location "/.well-known/acme-challenge/*" {
        root "/acme"
    }
    location * {
        block return 301 "https://example.com$REQUEST_URI"
    }
}
 
server "example.com" {
    listen on * tls port 443
    tls {
        certificate "/etc/ssl/example.com.crt"
        key "/etc/ssl/private/example.com.key"
    }
    root "/htdocs/example.com"
}

Blok port 80 mengarahkan challenge acme ke direktori /acme, lalu mengarahkan permintaan lain ke HTTPS. Blok port 443 memuat sertifikat dan kunci. Kalian akan memproduksi sertifikat itu di episode 10.

FastCGI dan Integrasi PHP

httpd tidak mengeksekusi PHP sendiri; ia berbicara ke PHP lewat FastCGI (misalnya php-fpm). Pertama, instal php dan aktifkan fpm:

Menyiapkan PHP dan php-fpm
pkg_add php
rcctl enable php_fpm
rcctl start php_fpm

Lalu konfigurasikan httpd untuk meneruskan permintaan .php ke fpm:

/etc/httpd.conf - FastCGI
server "example.com" {
    listen on * port 80
    root "/htdocs/example.com"
 
    location "/index.php" {
        fastcgi socket "/run/php-fpm.sock"
    }
}

Permintaan ke file PHP diteruskan lewat socket Unix ke php-fpm, dan httpd menyajikan hasilnya. Pendekatan ini menjaga keamanan: PHP tidak berjalan di dalam httpd, jadi bug di satu sisi tidak otomatis mengekspos sisi lain.

Reverse Proxy

httpd juga bisa menjadi reverse proxy — meneruskan permintaan ke aplikasi backend seperti aplikasi Node atau Python:

/etc/httpd.conf - reverse proxy
server "app.example.com" {
    listen on * port 80
    location "/" {
        proxy {
            pass to "tcp://127.0.0.1:8080"
        }
    }
}

Semua permintaan ke app.example.com diteruskan ke 127.0.0.1:8080. Kombinasi reverse proxy + TLS menjadikan httpd pintu depan yang aman untuk aplikasi apa pun — pola yang akan kalian perkuat dengan relayd di episode 16.

Info

Jika kalian memerlukan fitur httpd yang tidak tersedia — misalnya rewrite kompleks atau banyak modul — saat itulah pertimbangkan nginx atau relayd. Mulailah dari httpd: sederhana, aman, dan sering kali sudah cukup.

Validasi dan Troubleshooting

Sebelum restart, selalu validasi konfigurasi:

Validasi konfigurasi httpd
httpd -n
rcctl restart httpd
tail -f /var/log/httpd.error.log

Log error ada di /var/log/httpd.error.log. Kombinasi httpd -n + log adalah alat utama debugging. Jika permintaan gagal, periksa permission direktori dan status rcctl status httpd.

Penutup

Di episode 9 ini kalian menjalankan httpd, web server native OpenBSD: mengaktifkannya dengan rcctl, menyusun /etc/httpd.conf, membuat virtual host, mengamankan dengan TLS lewat acme-client, mengintegrasikan PHP melalui FastCGI, dan menjadikannya reverse proxy.

Inti yang harus dibawa pulang:

  • httpd dikonfigurasi lewat satu file, /etc/httpd.conf.
  • Virtual host adalah blok server dengan listen, root, dan aturan sendiri.
  • PHP dieksekusi lewat FastCGI (php-fpm), bukan di dalam httpd.
  • Selalu uji dengan httpd -n sebelum restart.

Di episode 10 selanjutnya, kita akan membongkar TLS dan sertifikat — mengenal LibreSSL sebagai fork OpenSSL, memakai openssl CLI, mengotomatiskan sertifikat Let's Encrypt dengan acme-client, dan melakukan TLS termination untuk httpd dan relayd.