如何设置一个最小的网络服务器,使其在所有请求中只提供一个页面?

如何设置一个最小的网络服务器,使其在所有请求中只提供一个页面?

端口 80 上的最小 Web 服务器如下:

python -m SimpleHTTPServer 80

maintenance.html但无论请求什么页面,我都希望始终只显示一个名为的页面。

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

答案1

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

例如,如果使用DJB 的 tcpserver(我发现它对于完成这些琐碎的任务来说很容易)你可以这样做:

$ tcpserver 127.0.0.1 1080 sh -c 'awk "/^\r*$/ { exit }"; cat answer'

并且在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

您可以尽情发挥您的创造力。

以下是我的测试方法:

$ wget -q -O - http://localhost:1080/
This is a test

更新:对于任何认真考虑这一点的人来说,为了实际使用,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'

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

当然,确保没有其他任何东西在监听端口 80。

答案2

这可能是由于对你之前的问题

为什么不(暂时)在 Apache 中应用重定向规则,将所有内容指向您的 sitedown 页面?(如果您通过代理请求而不是重定向来执行此操作,则该位置的任何 PHP 脚本都将能够读取请求的 URL)。您可以使用优雅重启来交换不同的配置,而不会丢失任何请求。

相关内容