Skip to content
A proof of concept to demonstrate how nginx and Erlang play nicely together.
C Erlang
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
README.markdown Adding license info
config Initial import of current (working) code. See the README for build an…
ngx_http_erlang_module.c Adding license info


This is an experimental erlang extension for nginx.

Contributions are welcome. I don't claim to write beautiful c. The biggest thing you can do to help is to show me what I did wrong (nicely) so I can learn from it.


From the nginx source directory, configure nginx with the module included.

$ ./configure --add-module=/path/to/erlang_nginx
$ make
$ make install


$ erl -setcookie secret -sname handler@localhost
1> P = demo:start().

Running nginx and making a curl request ala

$ curl http://localhost/foobar

Results in this output in Erlang:

{Pid, Method, Uri}: {<8207.9.0>, 2, "/foo" ++ _}


location /app/ {


  • ngx_http_erlang_module.c (66) - Get this from nginx.
  • ngx_http_erlang_module.c (69) - Set this during the erlang message recieve loop.
  • ngx_http_erlang_module.c (82) - Add secret to config
  • ngx_http_erlang_module.c (88) - Add node name to config
  • ngx_http_erlang_module.c (89) - Add node host to config
  • ngx_http_erlang_module.c (97) - Send the headers and request body
  • ngx_http_erlang_module.c (103) - Set the registered process that is the handler in the config.
  • ngx_http_erlang_module.c (106) - Find a way to fail gracefully if a message isn't recieved within
  • ngx_http_erlang_module.c (108) - Set the timeout duration in config.
  • ngx_http_erlang_module.c (120) - Handle response tuple: {StatusCode, Headers, Body}
  • ngx_http_erlang_module.c (126) - Set status code from response tuple


This software is Open Source under the MIT license.

Something went wrong with that request. Please try again.