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 中,你就可以使用浏览器访问它们了。
如果你想在网页上使用图像等文件,你需要在 httpd.conf 中通过文件扩展名定义每个文件的w:MIME 类型。例如,如果你想提供 Javascript、文本、HTML 和 SVG 文件,你可以在 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 类型。如果上面没有列出,请在维基百科中搜索你想要提供的文件类型。
对于服务器端脚本(使用诸如 Perl 或 PHP 等语言),你需要在 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>
如果你对这篇文章做出了贡献,请随时添加你的用户名。
- Orthogonal1- 开始页面。