node.js via CGI
Hi everyone! I’ve decided to create a new blog for myself. As many programmers do, I used this blog as an excuse to learn a new platform.
I wrote this blog engine from scratch using node.js. What makes this site different to the others running node.js is that this one is running completely off of a shared server (DreamHost, specifically).
When I was looking into using node.js, I found that most developers are deploying it by using the built-in web server and then optionally proxying it to Apache or Nginx. Those options just aren’t possible when using cheap shared hosting. At this point I could:
- Rent a virtual machine to deploy a node.js website (costs money)
- Hack up a custom solution to make node.js server on a shared server (takes time)
I chose the latter and now I am the proud creator of the node-cgi monster. It’s a CGI adaptor for node.js that mimmicks the node.js http
library.
To use the adaptor you must create a .htaccess
file that redirects paths to a CGI script. This blog uses:
Options +ExecCGI
AddHandler cgi-script cgi
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) server.cgi
Where server.cgi contains:
#!/usr/bin/env node
var blog = require('./blog'),
cgi = require('./cgi');
var server = cgi.createServer(blog.requestListener);
server.listen();
For people not familiar with node.js, using this library is very similar to the standard way of creating a HTTP server:
var blog = require('./blog'),
http = require('http');
var server = http.createServer(exports.requestListener);
server.listen(5000, "localhost");
This means that some applications will only have to change require('http')
to require('cgi')
to create a CGI version!
The library is up on GitHub for those that want to take a look. I’d like to know if anyone finds it useful!