Althttpd

使用 Xinetd 进行设置
登录

使用 Xinetd 进行设置

下面显示的是 sqlite.org 上 /etc/xinetd.d/http 文件的完整文本,该文件配置 althttpd 以在 IPv4 和 IPv6 上提供未加密的 HTTP 请求。您可以将其用作创建自己的安装的模板。

service http
{
  port = 80
  flags = IPv4
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/althttpd
  server_args = -logfile /logs/http.log -root /home/www -user www-data
  bind = 45.33.6.223
}
service http
{
  port = 80
  flags = REUSE IPv6
  bind = 2600:3c00::f03c:91ff:fe96:b959
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/althttpd
  server_args = -logfile /logs/http.log -root /home/www -user www-data
}

这里的关键观察是,端口 80 上的每个传入 TCP/IP 连接都会启动一个 /usr/bin/althttpd 的副本,并带有一些额外的参数,这些参数相当于 Web 服务器的配置。

请注意,althttpd 以超级用户身份运行。这不是必需的,但如果这样做,则 althttpd 会将自身移动到 Web 文档层次结构根目录(示例中为 /home/www)处的 chroot 监狱中,然后在读取任何内容之前放弃所有超级用户权限。-user 选项告诉 althttpd 在进入 chroot 监狱后成为用户 www-data。

-root 选项(始终应为绝对路径)告诉 althttpd 在哪里查找文档层次结构。在 sqlite.org 的情况下,所有内容都来自 /home/www。在此文档层次结构的顶层是一堆目录,其名称以“.website”结尾。每个此类目录都是一个单独的网站。根据传入 HTTP 请求的 Host: 参数选择目录。sqlite.org 上的目录部分列表如下

3dcanvas_tcl_lang_org.website
3dcanvas_tcl_tk.website
androwish_org.website
canvas3d_tcl_lang_org.website
canvas3d_tcl_tk.website
cvstrac_org.website
default.website
fossil_scm_com.website
fossil_scm_hwaci_com.website
fossil_scm_org.website
system_data_sqlite_org.website
wapp_tcl_lang_org.website
wapp_tcl_tk.website
www2_alt_mail_net.website
www_androwish_org.website
www_cvstrac_org.website
www_fossil_scm_com.website
www_fossil_scm_org.website
www_sqlite_org.website

对于每个传入的 HTTP 请求,althttpd 获取请求头中 Host: 参数的文本,将其转换为小写,并将所有非 ASCII 字母数字字符更改为“_”。结果确定要使用哪个子目录作为内容。如果没有任何匹配项,则“default.website”目录用作回退。

例如,如果 Host 参数为“www.SQLite.org”,则名称将转换为“www_sqlite_org.website”,并使用该目录提供内容。如果 Host 参数为“fossil-scm.org”,则使用“fossil_scm_org.website”目录。通常,两个或多个名称引用同一个网站。例如,fossil-scm.org、www.fossil-scm.org、fossil-scm.com 和 www.fossil-scm.com 都是同一个网站。在这种情况下,通常只有一个目录是真实目录,而其他目录是符号链接。

在仅托管单个网站的最小安装中,只需一个名为“default.website”的子目录就足够了。

在 *.website 目录中,要服务的文件由 HTTP 请求 URI 选择。标记为可执行的文件将作为 CGI 运行。名称以“.scgi”结尾且内容为“SCGI hostname port”形式的不可执行文件将 SCGI 请求转发到 hostname:port。所有其他不可执行文件按原样交付。

如果请求 URI 指定 *.website 中目录的名称,则 althttpd 会按顺序附加“/home”、“/index.html”和“/index.cgi”,以查找匹配项。

如果 URI 的前缀与可执行文件的名称匹配,则该文件将作为 CGI 运行。对于按原样提供的内容,请求 URI 必须与文件的名称完全匹配。

对于按原样提供的内容,MIME 类型是根据文件名扩展名使用编译到 althttpd 中的表推断出来的。

使用 Xinetd 支持 HTTPS

从 2.0 版(2022-01-16)开始,althttpd 可选地支持 TLS 加密连接。使用 Xinetd 设置 HTTPS 网站与 HTTP 网站非常相似。xinetd 的适当配置是 /etc/xinetd.d 目录中名为“https”的单个文件,其内容如下

service https
{
  port = 443
  flags = IPv4
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/althttpd
  server_args = -logfile /logs/http.log -root /home/www -user www-data -cert /etc/letsencrypt/live/sqlite.org/fullchain.pem -pkey /etc/letsencrypt/live/sqlite.org/privkey.pem
  bind = 45.33.6.223
}
service https
{
  port = 443
  flags = REUSE IPv6
  bind = 2600:3c00::f03c:91ff:fe96:b959
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/althttpd
  server_args = -logfile /logs/http.log -root /home/www -user www-data -cert /etc/letsencrypt/live/sqlite.org/fullchain.pem -pkey /etc/letsencrypt/live/sqlite.org/privkey.pem
}

当然,您需要调整路径名和 IP 地址,以使其适合您的特定安装。

此 https 配置文件与之前的 http 配置文件相同,只是有几处更改

创建新的 https 配置文件后,只需重新启动 xinetd(通常使用命令“/etc/init.d/xinetd restart”),您现有的网站的 HTTPS 版本就会立即出现。