国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Shell腳本實現的一個簡易Web服務器例子分享

2019-10-26 18:43:25
字體:
來源:轉載
供稿:網友

假設你想測試網頁和一些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變量輸出到可執行文件。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商丘市| 沁水县| 佳木斯市| 望都县| 贡嘎县| 双桥区| 勃利县| 清河县| 梁河县| 措美县| 乳山市| 扶绥县| 手机| 白城市| 江西省| 博湖县| 广河县| 陕西省| 张家口市| 柘荣县| 承德县| 太白县| 蒲江县| 赤峰市| 昭苏县| 沭阳县| 错那县| 图木舒克市| 邵东县| 水富县| 南通市| 施秉县| 泊头市| 渭源县| 扎鲁特旗| 杨浦区| 五指山市| 丹东市| 枣阳市| 额尔古纳市| 共和县|