我如何设置一个最小的网络服务器,它只为所有请求提供一个页面?

rub*_*o77 5 web-server

端口 80 上的最小网络服务器将是

python -m SimpleHTTPServer 80
Run Code Online (Sandbox Code Playgroud)

但我想始终只显示一页maintenance.html,无论请求什么页面。

浏览器中的 url 应该仍然是访问者请求的 url,但没有错误页面。

chu*_*utz 5

给出这个答案主要是为了娱乐价值,但您可以使用任何超级服务器(xinetd 也可以完成这项工作)并使其为端口 80 上的每个请求运行一个简单的脚本。该脚本将等待标准的空行输入然后打印准备好的静态响应。不确定你能得到多少轻量级。

例如,如果使用DJB 的 tcpserver(我发现它很容易用于此类琐碎的任务),您可以执行以下操作:

$ tcpserver 127.0.0.1 1080 sh -c 'awk "/^\r*$/ { exit }"; cat answer'
Run Code Online (Sandbox Code Playgroud)

answer文件中你可以有:

HTTP/1.0 200
Date: Fri, 02 Nov 2012 16:05:54 GMT
Content-Length: 15
Content-Type: text/html; charset=utf-8

This is a test
Run Code Online (Sandbox Code Playgroud)

您可以随心所欲地发挥创意。

这是我测试它的方法:

$ wget -q -O - http://localhost:1080/
This is a test
Run Code Online (Sandbox Code Playgroud)

更新:对于认真考虑这一点的任何人,为了实际使用tcpserver你,最好这样开始:

tcpserver -H -R -l $HOSTNAME -u $(id -u nobody) -g $(id -g nobody) 0.0.0.0 80 sh -c 'awk "/^\r*$/ { exit }"; cat answer'
Run Code Online (Sandbox Code Playgroud)

默认情况下,tcpserver 查找有关传入连接的信息,并且-H(不要在 DNS 中查找远程名称)和-R(不要使用 ident 查找远程信息)将加快对传入连接的响应。-u并且-g会在收到端口 80 上的连接后放弃特权,您必须以 root 身份启动它才能在端口 80 上侦听。

当然,请确保没有其他东西在侦听端口 80。