我有一个脚本可以生成每日报告,并希望将其提供给所谓的公众。问题是我不想增加所有配置和安全隐患的HTTP服务器(例如Apache)的维护工作。无需配置完整的HTTP服务器?

评论

请参阅有问题的答案stackoverflow.com/a/4994745,在Stack Overflow上的python中的一行ftp服务器。

为什么不只使用netcat?

确实!使用FTP,就像HTTP完成之前的万维网一样! (尽管我想它在1990年代初还不像世界范围内那样。)

本要点中已编译了大量方法

#1 楼

是的,nweb。

可以在这里找到:nweb.c

(以前在ibm.com)

要编译nweb.c:

gcc -O -DLINUX nweb.c -o nweb


评论


它运作良好,但有2个用户注释:1)它从提供的目录中提供index.html,2)来自nweb --help:“不支持:URL包括“ ..”,Java,Javascript,CGI”。因此,例如,Live.js在文件更新时自动刷新页面不起作用。

–xealits
19/12/13在13:41

#2 楼

试试SimpleHTTPServer:

python -m SimpleHTTPServer
# or the Python 3 equivalent
python3 -m http.server


它应该可以服务于CWD(例如index.html)中的http://0.0.0.0:8000。

评论


您可以选择指定这样的端口号:python3 -m http.server1337。据我所知,您无法指定绑定到哪个IP。注意:要监听端口80,您必须具有root特权,例如:sudo python3 -m http.server 80

–Hubro
2014年10月30日10:49



这是一个不错的选择,但是在重定向到添加了斜杠的URL时存在问题。这就是为什么我更喜欢扭曲版本:twisted -n web -p 8000 --path。

– Greg Dubicki
15年7月14日在8:49

要将默认侦听端口8080(使用python2)更改为其他端口,只需在以下端口后放置端口号:python -m SimpleHTTPServer 3000

–Maksim Luzik
19年2月1日在9:56



#3 楼

http静态服务器单线列表很大:


要获得此列表,必须有一个解决方案:


保存静态文件使用当前目录(或指定目录)作为服务器根目录
可以使用一个单行命令运行(依赖关系是一次性的,就可以了)
具有适当的mime类型的文件类型(html,css,js,图像),
除了命令本身(不需要框架特定的服务器等)之外,不需要配置(通过文件或其他方式)
,或者必须运行,或者具有可以在前台运行的模式(即没有守护程序)



例如:




扭曲(Python)

twistd -n web -p 8000 --path . 



Erlang:

erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'



Plack (Perl)

cpan Plack
plackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000



webfs

webfsd -F -p 8000



Ruby 1.9.2 +

ruby -run -ehttpd . -p8000




#4 楼

使用快速,轻巧的node.js



只需使用简单的nc netcat命令即可在端口上启动快速Web服务器,并提供包含服务器响应标头的文件内容。

维基百科的参考资料:

http://en.wikipedia.org/wiki/Netcat#Setting_up_a_one-shot_webserver_on_port_8080_to_present_the_content_of_a_file

{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat some.file; } | nc -l -p 8080
{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <some.file)\r\n\r\n"; cat some.file; } | nc -l -p 8080


评论


仅运行交互式外壳的裸节点.js进程占用15MB(共享7.5)RAM。然后,您必须在其中运行HTTP服务器。人们看到它是轻量级的,这很有趣。 ;-)

– jpc
2012年3月2日14:00

是的,我认为它重量轻,因此可以以较少的内存占用空间很好地扩展。请阅读thecodinghumanist.com/blog/archives/2011/5/6/…但是,如果您发现使用node.js麻烦,那么简单的netcat实用程序就可以很好地达到短暂的目的。

– Nikhil Mulley
2012年3月2日15:28

如果将节点与Apache进行比较,您当然是对的,但是我发现有趣的是,与cr.yp.to/publicfile.html或类似内容相比,节点的外观如何。 :)

– jpc
2012年6月6日上午10:54

+1基于nc的解决方案:)。请注意,回显的-ne标志可能不是可移植的,而改用printf命令可能是更好的选择。

–WhiteWinterWolf
16年11月5日,9:35

除非您使用第二个nc命令,否则Chrome不会停止跳动。另外,并非两个nc命令都将在响应后退出。您可以继续使用以下命令重新启动它:做{echo -ne“ HTTP / 1.0 200 OK \ r \ nContent-Length:$(wc -c
– Ray Foss
19 Mar 7 '19 at 18:10



#5 楼

自版本5.4.0起,PHP还具有内置的Web服务器:

php -S localhost:8000


您可以使用-t指定Web服务器的文档目录,例如:

php -S localhost:8000 -t /var/lib/www


如果您希望能够通过网络访问服务器,则:

php -S 0.0.0.0:8000 -t /var/lib/www


评论


哇,简单又有用!

– Michael-O
15年5月16日在19:08

如果您想在本地测试php脚本,那么这是一个很好的选择。

–erik
15年7月27日在9:51

#6 楼

Node具有一个简单,快速,轻便的HTTP服务器模块。要安装:

sudo npm install http-server -g


(假设您已经安装了nodenpm。)

要运行它,请使用当前目录作为网站root:

http-server


这将在http://0.0.0.0:8080/上创建服务器。

评论


有用。我在FreeBSD机器上有一个Node项目,我只是在项目目录中运行npm install -D http-server,然后将以下行添加到我的package.json文件中:“ scripts”:{“ build”:“ webpack && cd src / public && http-server“},现在我只需要在项目目录上运行npm run build即可启动HTTP服务器,默认情况下侦听端口8080。

–user3405291
17/09/14在12:52



首先,我尝试了“ python3 -m http.server”,但是它是单线程的,一次只能下载一个客户端,其他需要等待。由于Node的异步特性,因此使用Node.js的此解决方案效果更好。如果要与几个人共享文件,请使用此功能。

–贾巴
17年9月14日在16:14

该模块可能是“ light”,而node.js不是。您将运行JS运行时只是为了提供静态文件。

– c z
20 Dec 17 '15:02

#7 楼

尝试在Python中使用SimpleHTTPServer

mkdir ~/public_html
command_to_generate_output > ~/public_html/output.txt

(cd ~/public_html; python -c 'import SimpleHTTPServer,BaseHTTPServer; BaseHTTPServer.HTTPServer(("", 8080), SimpleHTTPServer.SimpleHTTPRequestHandler).serve_forever()')


前两行是为Web服务器设置的。最后一行创建了一个简单的Web服务器,该服务器在端口8080上打开,仅提供来自~/public_html的文件。如果该目录中只有一个文件,则仅公开该文件:http://localhost:8080/output.txt

评论


这就是我使用的方法,只需复制最后一行并将其粘贴到.py文件中,然后使用python运行它(或使其可执行)。请记住,您必须运行python 2.x解释器。

– Hanan N.
2012年2月20日在21:40

#8 楼

简单的Ruby一个衬里服务目录:

ruby -run -e httpd . -p 8080


#9 楼

./devd -o -a -P devd:devd .


-o在浏览器中打开URL
-a,用于所有接口
-P auth user / pass
。在同一目录中提供文件

https://github.com/cortesi/devd/releases

#10 楼

一个简单的修正/增强稍微不公平(恕我直言)的否决答案也可能有效。让我们先设置html文件... />现在,您可以使用以下这种方法来实现它:例如:

echo '<html><head><title>My Test File</title></head><body><h1>OK!</h1></body></html>' > my_file.html


评论


您的HTML中有一个错字:应该是

。我试图对其进行编辑,但是不允许编辑少于6个字符!

–史蒂夫·弗利(Steve Folly)
19/12/3在9:54

@SteveFolly Thx,已修复!

– Vijay
19/12/4在10:11

#11 楼

Oldschool Ruby WEBrick HTTP服务器:

#!/usr/bin/env ruby

require 'webrick'
server = WEBrick::HTTPServer.new(:Port => 8000,
                                 :DocumentRoot => '~/webrickroot')

# stop server with Ctrl-C
trap('INT') { server.stop }
server.start


确保为您的设置修改DocumentRoot。另请参见。

#12 楼

另一种选择是安装lighttpd。以下是在Unbuntu 12.04 LTS上安装lighttpd的建议步骤。

apt-get update
apt-get upgrade --show-upgraded
apt-get install lighttpd
ifconfig
http://[your-ip-address]:80
/etc/lighttpd/lighttpd.conf (Edit to add server.port)
server.port = "8080"


注意:Documentroot是所有可访问Web的文件的位置。位置是/ var / wwww

以上步骤将安装基本的lighttpd Web服务器。有关更多信息,请参考以下参考文献

参考文献:


lighttpd Ubuntu 12.04上的Web服务器(精确)
但不起作用。 lighttpd.pid权限被拒绝
入门-Linode
用于在Linux上测试的Web服务器
技术提示:具有Python的非常简单的HTTP Server
重量轻,开源Web服务器是正确的为您服务吗?
6种出色的Linux /开源Web服务器

Lighttpd配置


#13 楼

您可以使用xinetd。将以下配置文件放入/etc/xinetd.d/并重新加载xinetd服务:

#14 楼

试试caddy

curl https://getcaddy.com | bash

从/ var / www提供内容
caddy -root /var/www "browse"

现在您可以在http:// localhost找到服务器:2015


https://caddyserver.com/
https://nwgat.ninja/quick-easy-caddy-a-http-2-web-server-连扭/


评论


我喜欢只从本地目录登录,并喜欢拥有现代且安全的网络服务器。

–杜瓦莱
19-10-16在8:54

#15 楼

放入bash脚本的简单netcat示例:

while true ; do nc -l 80 <index.html ; done 


评论


完全无法使用HTTP。

–德罗伯特
2014年8月6日上午11:54

我尝试了[1 = 1];做回声“测试” | nc -l 80;完成-转到127.0.0.1确实返回了内容。我必须以root身份这样做。因此,以一种非常粗略的方式-它可以完成工作,我喜欢这样。我尝试去局域网中另一台机器上的my-hostnname.local,它也起作用。

– Unfa
17年12月11日在11:33



#16 楼

我按照以下说明在CentOS计算机上安装Web服务器,而不必使用sudo或触摸任何系统文件:

第一个安装节点:

$ cd ~
$ wget https://nodejs.org/download/release/latest/node-v8.6.0-linux-x64.tar.gz
$ tar node-v8.6.0-linux-x64.tar.gz


然后安装http-server:

$ export PATH=~/node-v8.6.0-linux-x64/bin:$PATH
$ npm install http-server


然后在端口12321上运行http-server:

$ ~/node-v8.6.0-linux-x64/bin/node_modules/http-server/bin/http-server -p 12321


评论


这似乎是不需要sudo或任何非标准实用程序的唯一答案。谢谢! (顺便说一句,到nodjs的链接已过期且已损坏)。

– Dmytro Bogatov
20 Dec 12'在23:18

#17 楼

我对nc解决方案做了一些改进:


添加filename=提示,
循环运行直到Ctrl + C,
将PID保存到/tmp/serveFile-$PORT,以便以后可以轻松将其杀死。



#!/bin/bash

FILE=;
if [ "$FILE" == "" ] ; then echo "Usage: q4312078q <file-to-serve> [<port:7979>]"; exit; fi
PORT=${2:-7979}
echo Serving $FILE at $PORT, PID: $$
echo $$ > /tmp/serveFilePID-$PORT

while true; do 
    { echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c <$FILE)\r\nContent-Disposition: inline; filename=\"$(basename $FILE)\"\r\n\r\n"; cat $FILE; } | nc -l $PORT
    CODE=$?
    #echo "Code: $CODE";
    if [ $CODE -gt 128 ] ; then break; fi;
done;

rm /tmp/serveFilePID-$PORT


也可以使用nc -k -l ...,但是通过这种方式,您可以


在所提供的文件之间执行自定义操作,
使多个文件交替。


#18 楼

在这里值得一提的SFK

http://stahlworks.com/dev/swiss-file-knife.html

无依赖的优秀多用途工具

有deb和rpm两种版本

sfk httpserv -port 1234

将提供当前目录

sfk httpserv -port 1234 -rw

也将允许文件上传

#19 楼

纯bash:shell脚本中的Web服务器。

此外,您将需要xinetd(我相信在任何发行版中都可以使用)来监听端口并在需要时运行脚本,因此您无需在bash中编码tcp堆栈等。

#20 楼

我的5美分,用shell写成:https://gitlab.com/mezantrop/supermatic


Supermatic可以在FreeBSD和任何其他具有Bourne Shell
和inetd的操作系统上运行样的守护程序。它提供静态HTML和TXT文件以及
GIF,JPEG和PNG图像格式。什么是其他标准和
功能?不,从没听说过。