跳转到内容

Unix/BSD/OpenBSD 作为 Web 服务器的指南

来自维基教科书,开放世界中的开放书籍

OpenBSD 自带了 Web 服务器 httpd(8)。(尽管名称相似,但这不是 Apache。)

要设置 Web 服务器,首先需要配置它。建议从提供的示例配置开始。

cp /usr/src/etc/examples/httpd.conf /etc/httpd.conf
vi /etc/httpd.conf

你可能希望首先从最小的配置开始,然后根据需要添加功能。下面是一个基本配置示例

ext_addr="egress"

server "default" {
listen on $ext_addr port 80
}

如果你想查看可用的功能,请查看 man(1) 页面

man httpd.conf

检查你的配置是否正确

httpd -n

最后,要使你的计算机提供页面,你需要启动守护进程

httpd

现在,将你的 html 文件放在 /var/www/htdocs 中,你就可以使用浏览器访问它们了。

非 html 文件

[编辑 | 编辑源代码]

如果你想在网页上使用图像等文件,你需要在 httpd.conf 中通过文件扩展名定义每个文件的w:MIME 类型。例如,如果你想提供 Javascript、文本、HTMLSVG 文件,你可以在 httpd.conf 中添加类似这样的部分

types {
        image/svg+xml                   svg;
        application/javascript          js;
        text/txt                        txt;
        text/html                       htm html;
}

用户手册中提到了其他有用的扩展名。(RUN: man httpd.conf [92%])

types {
        image/gif                       gif;
        image/jpeg                      jpeg jpg;
        image/png                       png;
        text/css                        css;
        application/xml                 xml;
}


维基百科关于 MIME 类型的文章 列出了很多 MIME 类型。如果上面没有列出,请在维基百科中搜索你想要提供的文件类型。

对于服务器端脚本(使用诸如 PerlPHP 等语言),你需要在 httpd.conf 中添加一些行。下面是一个配置示例

ext_addr="egress"

server "default" {
        listen on $ext_addr port 80

        location "/cgi-bin/*" {
                fastcgi
                root "/"
        }
}

然而,这还不够。OpenBSD 将其 Web 服务器放在 chroot(8) 中 - 也就是说,在 Web 服务器看来,根目录是 /var/www。Web 服务器无法看到你计算机上的任何其他文件。这是出于安全原因 - 如果黑客获得了你的系统访问权限,他们将拥有更少的资源。另一方面,这意味着你用于服务器端脚本的语言不存在。为了保持这种安全级别,你应该只复制你需要的文件。

此外,请注意,fastcgi 可能无法满足你的需求。如果事情无法正常工作,你需要运行 slowcgi(8)

slowcgi

要运行(使用上面的配置),你需要将你的 cgi 脚本放在 /var/www/cgi-bin 中。

复制主 perl 二进制文件和所需的库

mkdir -p /var/www/usr/bin
mkdir -p /var/www/usr/lib
mkdir -p /var/www/usr/libexec
cp /usr/bin/perl /var/www/usr/bin/perl
cp /usr/lib/libc.so.77.0 /var/www/usr/lib/libc.so.77.0
cp /usr/lib/libm.so.9.0 /var/www/usr/lib/libm.so.9.0
cp /usr/lib/libperl.so.15.0 /var/www/usr/lib/libperl.so.15.0
cp /usr/lib/libpthread.so.18.0 /var/www/usr/lib/libpthread.so.18.0
cp /usr/lib/libutil.so.12.1 /var/www/usr/lib/libutil.so.12.1
cp /usr/libexec/ld.so /var/www/usr/libexec/ld.so

在 chroot /var/www 中以 www 用户身份测试你的脚本,以检查是否有任何缺少的模块或其他错误。

chroot -u www /var/www <command>

如果你对这篇文章做出了贡献,请随时添加你的用户名。

华夏公益教科书