5 http snippets
Launching an SSL (HTTPS) Server in Node.js
JavaScript:
var https = require("https");
var fs = require("fs");
var key_file = "/path/to/file.pem";
var cert_file = "/path/to/file.crt";
var passphrase = "this is optional";
var config = {
key: fs.readFileSync(key_file),
cert: fs.readFileSync(cert_file)
};
if(passphrase) {
config.passphrase = passphrase;
}
https.createServer(config,app).listen(443);
CoffeeScript:
https = require "https"
fs = require "fs"
key_file = "/path/to/file.pem"
cert_file = "/path/to/file.crt"
passphrase = "this is optional"
config = {
key: fs.readFileSync(key_file)
cert: fs.readFileSync(cert_file)
}
config.passphrase = passphrase if passphrase?
https.createServer(config,app).listen(443)
Where /path/to/file.pem is the path to a file containing an RSA key, generated (for example) by:
openssl genrsa 1024 > /path/to/file.pem
and /path/to/file.crt is the path to a file containing an SSL certificate, generated (for example) by:
openssl req -new -key /path/to/file.pem -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey /path/to/file.pem -out /path/to/file.crt
Backup or mirror a website using wget
To create a local mirror or backup of a website with wget, run:
wget -r -l 5 -k -w 1 --random-wait <URL>
Where:
-r(or--recursive) will causewgetto recursively download files-l N(or--level=N) will limit recursion to at most N levels below the root document (defaults to 5, useinffor infinite recursion)-k(or--convert-links) will causewgetto convert links in the downloaded documents so that the files can be viewed locally-w(or--wait=N) will causewgetto wait N seconds between requests--random-waitwill causewgetto randomly vary the wait time to0.5xto1.5xthe value specified by--wait
Some additional notes:
--mirror(or-m) can be used as a shortcut for-r -N -l inf --no-remove-listingwhich enables infinite recursion and preserves both the server timestamps and FTP directory listings.-np(--no-parent) can be used to limitwgetto files below a specific "directory" (path).
Pre-generate pages or load a web cache using wget
Many web frameworks and template engines will defer the generation the HTML version of a document the first time it is accessed. This can make the first hit on a given page significantly slower than subsequent hits.
You can use wget to pre-cache web pages using a command such as:
wget -r -l 3 -nd --delete-after <URL>
Where:
-r(or--recursive) will causewgetto recursively download files-l N(or--level=N) will limit recursion to at most N levels below the root document (defaults to 5, useinffor infinite recursion)-nd(or--no-directories) will preventwgetfrom creating local directories to match the server-side paths--delete-afterwill causewgetto delete each file as soon as it is downloaded (so the command leaves no traces behind.)
Mapping port 80 to port 3000 using iptables
Port numbers less that 1024 are considered "privileged" ports, and you generally must be root to bind a listener to them.
Rather than running a network application as root, map the privileged port to a non-privileged one:
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000
Now requests to port 80 will be forwarded on to port 3000.
Launch an HTTP server serving the current directory using Python
The Python SimpleHTTPServer module makes it easy to launch a simple web server using a current working directory as the "docroot".
With Python 2:
python -m SimpleHTTPServer
or with Python 3:
python3 -m http.server
By default, each will bind to port 8080, hence http://localhost:8080/ will serve the top level of the working directory tree. Hit Ctrl-c to stop.
Both accept an optional port number:
python -m SimpleHTTPServer 3001
or
python3 -m http.server 3001
if you want to bind to something other than port 8080.
