Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I have a script which generates a daily report which I want to serve to the so called general public. The problem is I don't want to add to my headaches maintance of a http server (e.x. apache) with all the configurations and security implications.

Is there a dead simple solution for serving one small html page without the effort of configuring a full blown http server?

share|improve this question
4  
See answer stackoverflow.com/a/4994745 in question One line ftp server in python on Stack Overflow. –  manatwork Feb 20 '12 at 11:04

8 Answers 8

up vote 4 down vote accepted

Yes, nweb:

http://www.ibm.com/developerworks/systems/library/es-nweb/index.html

To compile nweb.c:

gcc -O -DLINUX nweb.c -o nweb
share|improve this answer

Use node.js , fast and lightweight.

Or

just use simple nc netcat command to start a quick webserver on a port and serve the content of a file including the server response headers.

Reference from Wikipedia:

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
share|improve this answer
2  
A bare node.js process with only the interactive shell running takes 15MB (7.5 is shared) of RAM. And then you have to run the HTTP server inside it. It is funny that people see it as lightweight. ;-) –  jpc Mar 2 '12 at 14:00
    
yeah I consider it light weight, you can scale well with such less memory footprint. Please read thecodinghumanist.com/blog/archives/2011/5/6/… However, if you find it cumbersome to use node.js, then the simple netcat utility serves the short lived purpose well. –  Nikhil Mulley Mar 2 '12 at 15:28
    
You are of course right if you compare node with Apache but what I found amusing was how node looks when compared to cr.yp.to/publicfile.html or something similar. :) –  jpc Mar 6 '12 at 10:54
    
hmmmmm.. ok ;-) –  Nikhil Mulley Mar 13 '12 at 5:16

Try using SimpleHTTPServer in Python.

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()')

The first two lines are setup for the web server. The last line creates a simple web server, opened on port 8080, which only serves files from ~/public_html. If only one file is in that directory, then only that is exposed: http://localhost:8080/output.txt.

share|improve this answer
    
that's what i use, just copy the lastline and paste it on a .py file, then run it with python (or make it executable). Keep in mind that you have to run with python 2.x interpreter. –  Hanan N. Feb 20 '12 at 21:40

python -m SimpleHTTPServer should do it.

share|improve this answer
3  
Or the Python 3 equivalent: python3 -m http.server –  Eliran Malka Feb 14 at 21:05

Since version 5.4.0 PHP also has a built-in web server:

php -S localhost:8000
share|improve this answer

Simple netcat example to put in bash script:

while true ; do nc -l 80 <index.html ; done 
share|improve this answer
    
That entirely fails to speak HTTP. –  derobert Aug 6 at 11:54

Node has a simple, fast, light HTTP server module. To install:

sudo npm install http-server -g

(Assuming you have node and npm already installed.)

To run it, using the current directory as the website root:

http-server

This creates a server on http://0.0.0.0:8080/.

share|improve this answer

Oldschool Ruby WEBrick HTTP server:

#!/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

Make sure to modify the DocumentRoot for your setup. See also this.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.