Shell指令碼實現的一個簡易Web伺服器例子分享_linux shell

來源:互聯網
上載者:User

假設你想測試網頁和一些CGI,而你又不想麻煩Apache安裝完整的包。這個快速的shell指令碼可能只是你所需要的東西。

簡而言之,一個web伺服器是一個應用程式,該應用程式將本地文字檔通過網路發送給客戶的請求。如果你讓另一個程式(例如inetd)處理網路情況下,web伺服器可以減少到只有 cat "檔案名稱”發送到stdout。當然,困難將提取部分檔案名稱的HTTP請求字串:任何一個Bash指令碼無法輕易做到。

指令碼

我們的指令碼應該像其他任何指令碼一樣,加上一些定義:

複製代碼 代碼如下:

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

inetd將從遠程主機接收到的資料傳遞給我們的指令碼,第一行是標準的HTTP請求,後跟零個或更多的標頭檔。我們記錄下請求,並退出休眠:
複製代碼 代碼如下:

read request

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


最麻煩的部分:從請求的資料中提取URL並在本地檔案中找到對應檔案:
複製代碼 代碼如下:

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

返回含有頭部資訊的檔案內容。
複製代碼 代碼如下:

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就是你剛剛建立的指令碼名稱。

使用/etc/init.d/inetd restart使指令碼生效後,就可以測試它了。在/var/www下放一些HTML檔案,開啟你最喜歡的Web瀏覽器的輸入以下地址測試:http://localhost/FILENAME.html

請注意,如果你的電腦串連這一個不安全的網路,這個指令碼可能不算一個聰明的事,因為誰都可以通過80連接埠訪問你硬碟上的檔案。一個更好的辦法是使用 tcpd 來保證只允許本地串連。我會寫一些相關的資訊,發揮你的想象力去幹吧!

什麼是CGI

就像這個,WEB伺服器是沒什麼用處的,它什麼都做不到,而且你可以用其他方法來訪問你的檔案。我們需要CGI的支援(哪怕是很簡單的)。

理論:不通過網路發送一個文字檔,我們運行一個可執行檔,並將其輸出。在這之前,我們已經處理的HTTP請求的一步,建立一個 QUERY_STRING變數輸出到可執行檔。

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

複製代碼 代碼如下:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.