假設你想測試網頁和一些CGI,而你又不想麻煩Apache安裝完整的包。這個快速的shell腳本可能只是你所需要的東西。
簡而言之,一個web服務器是一個應用程序,該應用程序將本地文本文件通過網絡發送給客戶的請求。如果你讓另一個程序(例如inetd)處理網絡情況下,web服務器可以減少到只有 cat "文件名”發送到stdout。當然,困難將提取部分文件名的HTTP請求字符串:任何一個Bash腳本無法輕易做到。
腳本
我們的腳本應該像其他任何腳本一樣,加上一些定義:
while /bin/true; do
read header
[ "$header" == $'/r' ] && break;
done
安裝
為了使它工作,你必須添加以下行到/etc/inetd.conf文件:
使用/etc/init.d/inetd restart使腳本生效后,就可以測試它了。在/var/www下放一些HTML文件,打開你最喜歡的Web瀏覽器的輸入以下地址測試:http://localhost/FILENAME.html
請注意,如果你的電腦連接這一個不安全的網絡,這個腳本可能不算一個聰明的事,因為誰都可以通過80端口訪問你硬盤上的文件。一個更好的辦法是使用 tcpd 來保證只允許本地連接。我會寫一些相關的信息,發揮你的想象力去干吧!
什么是CGI
就像這個,WEB服務器是沒什么用處的,它什么都做不到,而且你可以用其他方法來訪問你的文件。我們需要CGI的支持(哪怕是很簡單的)。
理論:不通過網絡發送一個文本文件,我們運行一個可執行文件,并將其輸出。在這之前,我們已經處理的HTTP請求的一步,建立一個 QUERY_STRING變量輸出到可執行文件。
要做到這樣,你只需要把第三步的代碼替換成這個樣子的就可以了。
filename="$base$url"
if [ "$query" != "$url" -a -x "$filename" ]; then
export QUERY_STRING="$query"
echo -e "HTTP/1.1 200 OK/r"
"$filename"
echo -e "/r"
exit 0
fi
當然,這個小玩意的性能無法與Apache相比,這只是一個小玩意。
新聞熱點
疑難解答