简单的 NetBSD 网站服务器

Lobsters Hottest 工具

摘要

一份在 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/)

相似文章