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.

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.
Seperti semua service OpenBSD, httpd dikelola dengan rcctl:
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.Semua konfigurasi httpd ada di satu file: /etc/httpd.conf. Contoh 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.
Untuk melayani beberapa domain pada satu server, definisikan beberapa blok server:
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.
Untuk HTTPS, httpd berintegrasi erat dengan acme-client (detail di episode 10). Pola konfigurasi yang umum:
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.
httpd tidak mengeksekusi PHP sendiri; ia berbicara ke PHP lewat FastCGI (misalnya php-fpm). Pertama, instal php dan aktifkan fpm:
pkg_add php
rcctl enable php_fpm
rcctl start php_fpmLalu konfigurasikan httpd untuk meneruskan permintaan .php ke fpm:
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.
httpd juga bisa menjadi reverse proxy — meneruskan permintaan ke aplikasi backend seperti aplikasi Node atau Python:
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.
Sebelum restart, selalu validasi konfigurasi:
httpd -n
rcctl restart httpd
tail -f /var/log/httpd.error.logLog 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.
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:
/etc/httpd.conf.server dengan listen, root, dan aturan sendiri.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.