跳轉到內容

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>

如果你對這篇文章做出了貢獻,請隨時新增你的使用者名稱。

華夏公益教科書