원문 캡처 · bsandro.tech
원문 캡처 · bsandro.tech

현대 웹에서 직접 관리하는 공간을 만들고 싶다면 NetBSD 11에 기본으로 포함된 bozohttpd(8)로 작은 웹 서버를 운영할 수 있다. 이 방법은 HTTPS를 위한 패키지 하나만 추가하면 되며, 글쓴이는 가정용 프로젝트나 소규모 커뮤니티에 적합하다고 설명한다. 트래픽이 많은 사이트에는 맞지 않을 수 있다.1 2

필요한 것은 VPS나 로컬·가상 머신과 터미널 에뮬레이터다. 웹 브라우저로 결과를 확인할 수도 있지만, 글쓴이는 curl만으로도 충분하다고 말한다.

글쓴이는 VPS 업체로 netcup을 사용한다고 소개한다. 저렴하고 NetBSD 11 amd64 ISO가 운영체제 설치 목록에 미리 들어 있다는 설명이다. NetBSD용으로 추천받은 다른 업체로는 panix, mythic beasts, linveo, tierhive가 있다.

NetBSD에는 기본 제공되는 소형 웹 서버 bozohttpd(8)가 있다. 설계상 기능이 제한적이지만, 매뉴얼에는 마커 파일과 간단한 명령줄 옵션으로 사용할 수 있는 기능이 설명돼 있다. inetd(8)를 통해 실행하는 방법도 있지만, 글쓴이는 연결마다 httpd 인스턴스를 실행하는 대신 데몬으로 직접 실행하는 방식을 선호한다.

설정은 명령줄 옵션으로 지정하며, 다음처럼 /etc/rc.conf에 넣을 수 있다.

httpd=YES
httpd_wwwuser=nobody
httpd_wwwdir=/var/www/my_magical_domain

/var/www/my_magical_domain/index.html 파일을 준비한 뒤 /etc/rc.d/httpd start를 실행하면 일반 HTTP로 파일을 제공한다.

HTTPS를 설정할 때는 자체 서명 인증서 대신 Let’s Encrypt 인증서를 사용한다. 글쓴이는 pkgin으로 설치하는 acme-client 패키지를 이용한다. 인증서 검증용 파일을 둘 디렉터리와 인증서를 저장할 디렉터리를 만들고, 도메인 설정 파일 /usr/pkg/etc/acme-client.conf를 준비한다.

mkdir -p /etc/ssl/private
mkdir -p /var/www/my_magical_domain/.well-known/acme-challenge
authority letsencrypt {
 api url "https://acme-v02.api.letsencrypt.org/directory"
 account key "/usr/pkg/etc/acme/letsencrypt-privkey.pem"
}

domain my_magical_domain {
 alternative names { www.my_magical_domain }
 domain key "/etc/ssl/private/my_magical_domain.key"
 domain full chain certificate "/etc/ssl/my_magical_domain.fullchain.pem"
 challengedir "/var/www/my_magical_domain/.well-known/acme-challenge"
 sign with letsencrypt
}

acme-client my_magical_domain을 실행하면 필요한 인증서가 지정한 경로에 생성된다. VPS의 IP 주소를 도메인의 A 레코드에 입력한 뒤에는 DNS 정보가 전파되고 Let’s Encrypt에서도 도메인이 확인될 때까지 몇 시간 이상 기다려야 한다.

인증서와 키를 bozohttpd에 지정하면 443 포트에서도 자동으로 서비스를 제공한다. /etc/rc.conf에 다음 설정을 추가한다.

httpd_flags="-Z /etc/ssl/my_magical_domain.fullchain.pem /etc/ssl/private/my_magical_domain.key"

httpd를 재시작하면 웹 디렉터리에 넣은 정적 파일을 제공할 수 있다. Let’s Encrypt 인증서는 만료되므로 acme-client(1)로 갱신해야 한다. 글에서는 crontab(5)에 매주 실행하고 httpd를 재시작하는 작업을 등록하는 예를 든다.

0 2 * * 1 /usr/pkg/bin/acme-client my_magical_domain && /etc/rc.d/httpd restart

bozohttpd는 가상 호스트, CGI, HTTP 기본 인증도 지원한다. 글쓴이는 Lua 스크립팅과 CGI에 연결한 URL 재작성 기능도 관심 기능으로 언급하며, 자세한 내용은 매뉴얼에서 확인할 수 있다고 안내한다. 실제 운영 예시는 Braincoded Software다.

각주에서는 NetBSD 외에 9front와 TempleOS도 언급한다. 다만 TempleOS는 네트워크를 지원하지 않는다고 설명한다. 일반 HTTP를 쓰거나 자체 서명 인증서를 이용한다면 외부 도구가 필요하지 않다.