简单的 NetBSD 网站服务器
摘要
一份在 NetBSD 11 上使用自带的 bozohttpd 守护进程搭建轻量级网站服务器的实用指南,并通过 acme-client 和 Let's Encrypt 配置 HTTPS,适合小型或自建项目。
<p><a href="https://lobste.rs/s/hzrmwz/simple_netbsd_webserver">评论</a></p>
查看缓存全文
缓存时间: 2026/10/27 01:59
# 简单的 NetBSD Web 服务器
原文:https://bsandro.tech/posts/simple-netbsd-webserver/
1. 前言 (https://bsandro.tech/posts/simple-netbsd-webserver/#preface)
2. 前置条件 (https://bsandro.tech/posts/simple-netbsd-webserver/#prerequisites)
3. VPS (https://bsandro.tech/posts/simple-netbsd-webserver/#vps)
4. 运行 bozohttpd (https://bsandro.tech/posts/simple-netbsd-webserver/#running-bozohttpd)
5. 使用 HTTPS (https://bsandro.tech/posts/simple-netbsd-webserver/#using-https)
6. 值得注意的特性 (https://bsandro.tech/posts/simple-netbsd-webserver/#notable-features)
7. 在线示例 (https://bsandro.tech/posts/simple-netbsd-webserver/#live-example)
## 前言
也许有时候你希望在现代万维网那混乱不堪的天地中拥有一片属于自己的安身之所。可选方案并不多,到头来大概只剩下~三个操作系统是可以放心用在你的服务器上的¹ (https://bsandro.tech/posts/simple-netbsd-webserver/#fn:1)。
在这里我将介绍一条快速且经过验证的路线,用于运行 **NetBSD 11** Web 服务器——采用"官方自带"方式,使用 **bozohttpd**,只需额外安装一个软件包即可支持 HTTPS² (https://bsandro.tech/posts/simple-netbsd-webserver/#fn:2)。如果你预期有大量访问流量,它可能不太够用,但对于自制项目和小规模社区来说应该绰绰有余。
## 前置条件
一台 VPS(或本地机器、虚拟机)以及一个终端模拟器。
也许还需要一个浏览器来查看效果(不过在我看来,`curl` 就已经完全够用了)。
## VPS
我与以下服务没有利益关联,仅作为推荐——我使用的是 netcup (https://www.netcup.com/en) 的服务,看起来还不错。价格不贵,而且他们的操作系统库中已经预装了 NetBSD 11 amd64 的 ISO 镜像,可以直接在你的机器上安装。
其他人也推荐过一些支持 NetBSD 的服务商:
- panix (https://www.panix.com/)
- mythic beasts (https://www.mythic-beasts.com/)
- linveo (https://linveo.com/)
- tierhive (https://tierhive.com/)
如果你还能推荐更多,欢迎发邮件告诉我,我会把它们加入列表。
## 运行 bozohttpd
NetBSD 开箱自带一个轻量级 Web 服务器——`bozohttpd(8)`,它足以应对大量场景。它在设计上有所限制,但手册页写得相当不错,描述了很多仅通过标记文件和简单命令行选项就能实现的功能。
网上有些指南介绍了使用 `inetd(8)` 运行它的方式——`inetd` 是 Unix 上类似"超级服务器"的角色——但我不太喜欢这种方式,因为每次有连接进来它都会启动一个 httpd(`bozohttpd` 的别名/硬链接)实例。bozohttpd 本身支持以守护进程方式运行,我更喜欢这种方式。
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
我不会讲解自签名证书的流程,而是直接使用互联网上最流行的免费证书颁发机构之一——letsencrypt。
获取证书有多种方式,我使用的是 `acme-client` 软件包(通过 `pkgin` 安装)——它是 OpenBSD 上一个工具的移植版本,我对它最为熟悉。
我们需要额外创建几个目录来放置挑战文件和证书。尽量别用 "4" 作为私钥——它最近被泄露了,至少用素数吧 :)
```
mkdir -p /etc/ssl/private
mkdir -p /var/www/my_magical_domain/.well-known/acme-challenge
```
我们还需要一个域名配置文件——**/usr/pkg/etc/acme-client.conf**:
```
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 记录后,等待至少几个小时——它需要在各处完成传播,并且 letsencrypt 也能正确解析到。
之后我们需要将密钥传递给 bozohttpd,这将使它自动监听 443 端口。所以在 /etc/rc.conf 中还需要添加如下内容:
```
httpd_flags="-Z /etc/ssl/my_magical_domain.fullchain.pem /etc/ssl/private/my_magical_domain.key"
```
重启 httpd,然后就大功告成了——我们拥有了一个可用的 Web 服务器,可以展示你放入该目录中的任何静态文件。
还有一件事——Letsencrypt 的证书在一定时间后会过期,所以我们需要用同样的 `acme-client(1)` 程序来续期。最简单的方式是创建一个 cron 任务——每天或每周——尝试更新证书然后重启 httpd,通过 `crontab(5)` 配置:
```
0 2 * * 1 /usr/pkg/bin/acme-client my_magical_domain && /etc/rc.d/httpd restart
```
## 值得注意的特性
尽管 Bozotic httpd 风格极简,但它支持一些有趣的功能,例如**虚拟主机**(你可以让绑定到同一 IP 的不同域名从不同的目录提供服务)、**CGI** 以及 **HTTP 基本认证**。
另一个我有朝一日想尝试的有趣功能是原生的 **Lua 脚本**支持。
**URL 重写** 看起来也很有前景——尤其是与 CGI 结合使用时,可以无缝地提供一些反馈和交互性(比如访客计数器哈哈)。
`bozohttpd(8)` 的手册页包含大量有用信息,别忘了去看看。
## 在线示例
Braincoded Software (https://braincoded.software/)
相似文章
在NetBSD上使用bozohttpd搭建简单的Web服务器
在NetBSD上使用bozohttpd搭建简单Web服务器的实用指南,包括通过inetd进行配置、使用acme-client实现HTTPS,以及可选的多站点设置。
使用 OpenBSD 搭建一个简单的自托管网页服务器
一份在 OpenBSD 上使用 httpd 和 WireGuard 通过 VPS 隧道隐藏 IP 来设置自托管网页服务器的逐步指南。
一台修复后的 PDP-11/83 在 211BSD Unix 上托管此页面
详细概述一台修复后的 PDP-11/83 系统运行 2.11BSD Unix,展示其硬件组件、软件设置和网络功能以托管网页。
用 aarch64 汇编构建 Web 服务器,给我的生活(缺乏)意义
本文介绍了 'ymawky',一个完全用 aarch64 汇编为 macOS 编写的最小 HTTP Web 服务器,使用原始系统调用而无需 libc 包装器,以探索底层系统机制。
@avrldotdev: 最佳指南,适合任何人深入了解HTTP服务器工作原理并亲手构建一个。本文将帮助你学习:0. 网络…
一份全面的指南,介绍HTTP服务器的工作原理,涵盖网络协议、分块编码、状态机、解析器编写和并发基础知识,并附有亲手构建的说明。