我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Shell脚本实现的一个简易Web服务器例子分享

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Shell脚本实现的一个简易Web服务器例子分享

假设你想测试网页和一些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 OKr"

  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 Foundr"

  echo -e "Content-Type: text/htmlr"

  echo -e "r"

  echo -e "404 Not Foundr"

  echo -e "Not Found

           The requested resource was not foundr"

  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 OKr" "$filename" echo -e "r" exit 0 fi

当然,这个小玩意的性能无法与Apache相比,这只是一个小玩意。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Shell脚本实现的一个简易Web服务器例子分享

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Shell脚本实现的一个简易Web服务器例子分享

假设你想测试网页和一些CGI,而你又不想麻烦Apache安装完整的包。这个快速的shell脚本可能只是你所需要的东西。 简而言之,一个web服务器是一个应用程序,该应用程序将本地文本文件通过网络发送给客户的请求。如果你让另一个程序(例如in
2022-06-04

怎么用Shell脚本实现一个简易Web服务器

这篇文章主要介绍“怎么用Shell脚本实现一个简易Web服务器”,在日常操作中,相信很多人在怎么用Shell脚本实现一个简易Web服务器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Shell脚本实现一
2023-06-09

分享个简易版Linux服务器初始化Shell脚本

该Shell脚本主要用于新安装Linux服务器系统的初始化工作,具体包括: 关闭IPv6模块 关闭SELinux 让vim显示颜色 设置系统语言编码 优化系统服务 内核参数优化等。 可以根据自己的实际情况修改,可用于生产环境。原作者是Net
2022-06-04

一个简洁的全自动安装LNMP服务器环境的Shell脚本分享

此脚本在生产服务器上使用了一年多,本脚本崇尚简单唯美,只需要一个脚本就可以在任何一台有网络的服务器上自动配置LNMP。 本脚本会在脚本执行目录下,建packages目录用于存放LNMP所需要的软件。大家安装完可以删除该目录。 使用方法: 1
2022-06-04

如何实现简易版Linux服务器初始化Shell脚本

这篇文章主要介绍如何实现简易版Linux服务器初始化Shell脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该Shell脚本主要用于新安装Linux服务器系统的初始化工作,具体包括:关闭IPv6模块关闭SELin
2023-06-16

如何使用Python实现一个简易版Web服务器

今天小编给大家分享一下如何使用Python实现一个简易版Web服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、简介我
2023-07-05

教你使用Python实现一个简易版Web服务器

这篇文章主要介绍了教你使用Python实现一个简易版Web服务器,本篇文章将通过实现一个简易版的Web服务器,帮助读者理解Python网络编程的基本概念和技巧,需要的朋友可以参考下
2023-05-14

Shell脚本实现复制文件到多台服务器的代码分享

在多机集群环境中,经常面临修改配置文件后拷贝到多台服务器的情况,传统的执行scp比较麻烦,所以写了以下shell脚本,可以将指定文件拷贝到多台机器。 使用方法请参见HELP部分代码。#!/bin/bashhelp(){cat << HELP
2022-06-04

使用Node.js实现一个简单的FastCGI服务器实例

本文是我最近对Node.js学习过程中产生的一个想法,提出来和大家一起探讨。 Node.js的HTTP服务器 使用Node.js可以非常容易的实现一个http服务,最简的例子如官方网站的示例: var http = require('htt
2022-06-04

编程热搜

目录