以下顯示的是 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 的一個副本,並帶有一些額外的參數,這些參數相當於網路伺服器的設定。
請注意,althttpd 以超級使用者身分執行。這並非必要,但如果這樣做,althttpd 會將自身移動到 Web 文件階層根目錄(範例中為 /home/www)的 chroot jail 中,然後在讀取網路上的任何內容之前放棄所有超級使用者權限。 -user 選項告訴 althttpd 在進入 chroot jail 後成為使用者 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 主機名稱 埠」形式的不可執行檔案會將 SCGI 請求轉發到主機名稱:埠。所有其他不可執行的檔案都按原樣傳遞。
如果請求 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 設定檔相同,只是做了一些更改。
- 將服務名稱從「http」改為「https」
- 將連接埠號從 80 改為 443
- 新增 -cert 和 -pkey 選項到 althttpd,以便它知道在哪裡找到適當的憑證和私鑰。
建立新的 https 設定檔後,只需重新啟動 xinetd(通常使用指令「/etc/init.d/xinetd restart
」),現有網站的 HTTPS 版本就會立即生效。