怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器-創(chuàng)新互聯(lián)

這篇文章主要介紹“怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器”,在日常操作中,相信很多人在怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司一直秉承“誠信做人,踏實做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個客戶多一個朋友!專注中小微企業(yè)官網(wǎng)定制,成都網(wǎng)站建設(shè)、做網(wǎng)站,塑造企業(yè)網(wǎng)絡(luò)形象打造互聯(lián)網(wǎng)企業(yè)效應(yīng)。

假設(shè)你想測試網(wǎng)頁和一些CGI,而你又不想麻煩Apache安裝完整的包。這個快速的shell腳本可能只是你所需要的東西。

簡而言之,一個web服務(wù)器是一個應(yīng)用程序,該應(yīng)用程序?qū)⒈镜匚谋疚募ㄟ^網(wǎng)絡(luò)發(fā)送給客戶的請求。如果你讓另一個程序(例如inetd)處理網(wǎng)絡(luò)情況下,web服務(wù)器可以減少到只有 cat "文件名”發(fā)送到stdout。當然,困難將提取部分文件名的HTTP請求字符串:任何一個Bash腳本無法輕易做到。

腳本

我們的腳本應(yīng)該像其他任何腳本一樣,加上一些定義:


代碼如下:


#!/bin/bash
base=/var/www



inetd將從遠程主機接收到的數(shù)據(jù)傳遞給我們的腳本,第一行是標準的HTTP請求,后跟零個或更多的頭文件。我們記錄下請求,并退出休眠:


代碼如下:


read request

while /bin/true; do
  read header
  [ "$header" == $'\r' ] && break;
done

最麻煩的部分:從請求的數(shù)據(jù)中提取URL并在本地文件中找到對應(yīng)文件:


代碼如下:


url="${request#GET }"
url="${url% HTTP/*}"
filename="$base$url"



返回含有頭部信息的文件內(nèi)容。


代碼如下:


if [ -f "$filename" ]; then
  echo -e "HTTP/1.1 200 OK\r"
  echo -e "Content-Type: `/usr/bin/file -bi \"$filename\"`\r"
  echo -e "\r"
  cat "$filename"
  echo -e "\r"
else
  echo -e "HTTP/1.1 404 Not Found\r"
  echo -e "Content-Type: text/html\r"
  echo -e "\r"
  echo -e "404 Not Found\r"
  echo -e "Not Found
           The requested resource was not found\r"
  echo -e "\r"
fi



好了,腳本完了。

安裝

為了使它工作,你必須添加以下行到/etc/inetd.conf文件:


代碼如下:


www stream tcp nowait nobody /usr/local/bin/webd webd



webd就是你剛剛創(chuàng)建的腳本名稱。

使用/etc/init.d/inetd restart使腳本生效后,就可以測試它了。在/var/www下放一些HTML文件,打開你最喜歡的Web瀏覽器的輸入以下地址測試:http://localhost/FILENAME.html

請注意,如果你的電腦連接這一個不安全的網(wǎng)絡(luò),這個腳本可能不算一個聰明的事,因為誰都可以通過80端口訪問你硬盤上的文件。一個更好的辦法是使用 tcpd 來保證只允許本地連接。我會寫一些相關(guān)的信息,發(fā)揮你的想象力去干吧!

什么是CGI

就像這個,WEB服務(wù)器是沒什么用處的,它什么都做不到,而且你可以用其他方法來訪問你的文件。我們需要CGI的支持(哪怕是很簡單的)。

理論:不通過網(wǎng)絡(luò)發(fā)送一個文本文件,我們運行一個可執(zhí)行文件,并將其輸出。在這之前,我們已經(jīng)處理的HTTP請求的一步,建立一個 QUERY_STRING變量輸出到可執(zhí)行文件。

要做到這樣,你只需要把第三步的代碼替換成這個樣子的就可以了。

代碼如下:


url="${request#GET }"
url="${url% HTTP/*}"
query="${url#*\?}"
url="${url%%\?*}"

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相比,這只是一個小玩意。

到此,關(guān)于“怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

網(wǎng)站名稱:怎么用Shell腳本實現(xiàn)一個簡易Web服務(wù)器-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://muchs.cn/article36/djegpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化服務(wù)器托管、手機網(wǎng)站建設(shè)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司