Dropping a new nginx binary and live-migrating to it takes as much time as doing the same on Apahce with a new .so
Have you ever actually used nginx? I compile it from source with much-less-than-everything for security reasons (e.g., no proxy, no email, no ssi, no ssl, not any of the other ten modules that come by default), and in the 3 times that I needed a module later, it was a quick ./configure;make;make install;kill -SIG2 (or whatever the signal is to switch to a new version), which was not more painful than I remember from my apache days of 5 years ago.
I count 67 different modules in /etc/apache2/mods-available. Which means you rarely a new .so. On the other hand, Nginx is much more limited in functionalities out-of-the-box.
How do you handle deployment of your custom nginx on several boxes?
The same way I handle deployment of everything else. The binary is just one file (/usr/sbin/nginx). Distributing config and restarting processes is the same as with apache.
(My recent nginx deployment have 2 machines, so I do it manually, but in the past, I had a homegrown solution that would pull files from version control, and if they changed, asked the binary to restart)
Have you ever actually used nginx? I compile it from source with much-less-than-everything for security reasons (e.g., no proxy, no email, no ssi, no ssl, not any of the other ten modules that come by default), and in the 3 times that I needed a module later, it was a quick ./configure;make;make install;kill -SIG2 (or whatever the signal is to switch to a new version), which was not more painful than I remember from my apache days of 5 years ago.
(Has apache changed since then?)