I must confess that I am not a big user of WSAPI’s FastCGI connector. I do not maintain any high-volume websites, and for testing and development it is so much quicker and hassle-free to just start a Xavante instance; no need to mess with complex configuration files, or log files. Even the LuaRocks wiki is running on a Xavante instance with an Apache in front, using mod_proxy
in front. The only time Xavante needs to be restarted is when the slice needs to go down for maintenance.
A recent discussion on the Lua mailing list prompted me to revisit the FastCGI launcher, to see if I could get it running under nginx and OS X without much hassle, and to get acquainted with nginx, a web server I only know by reputation. Bertrand Mansion had already pointed the way in a message on the Kepler mailing list, so it was a simple matter of finding my way around the nginx configuration, and fixing a small bug in the snippet that Bertrand provided. This is what I ended up adding to my nginx.conf
file:
This configuration sets PATH_INFO
and SCRIPT_FILENAME
to what WSAPI’s FastCGI launcher and WSAPI applications expect. Notice there is no mention of wsapi.fcgi
anywhere; that is because nginx does not start FastCGI processes, you have to start them manually. To do that for wspai.fcgi
I needed to grab spawn-fcgi, and then run this from the command line:
This line spawns four worker processes (-F 4
) using the wsapi.fcgi
shell script that LuaRocks installed. Now I just had to copy some WSAPI applications to nginx’s docroot, and point the browser to them, and everything just worked. I wanted to see how this setup compared with Xavante, so I ran ab -c 5 -n 1000
on the hello.lua
script that does with WSAPI (in the samples
folder) on both nginx and plain Xavante. On my lowly Atom netbook I get ~200 req/s with Xavante and ~320 req/s with nginx, a 50% improvement. Not bad! I have to try it on a real computer, and also benchmark nginx proxying to a “tribe” of Xavantes instead of going directly to a single Xavante instance, but these are for another post.