Hacker News new | comments | show | ask | jobs | submit login

Anyone outside of Taobao using this in production? I'd be really interested in a reliable version of nginx supporting dynamic loading of modules, recompiling nginx everytime you need a custom module quickly loses its charm.

Yes, we use it in production. However our requirements are for the logging enhancements rather than the dynamic modules.

In our experience it's every bit as reliable as mainline nginx.

Perhaps dynamic loading is useful to speed up tinkering with development and staging, but for production I'll take a system with the least moving parts any day.

Compiling nginx is generally very fast (especially if you compare to other server).

Also, you can upgrade nginx binary without any downtime, see: http://wiki.nginx.org/CommandLine

If you compare to another sever like Apache which supports dynamic modules, adding a single line in a configuration file (or at worst dropping a .so in a folder, followed by adding a line in a configuration file) is much less work than retrieving gcc and friends and rebuilding a .deb.

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.

(Has apache changed since then?)

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)

  > recompiling nginx everytime you need a custom
  > module quickly loses its charm
How often are you adding/removing modules?

Once, ever, is more than anybody wants.

[I'm a huge nginx fan myself but recall that this is coming to the main project soonish.]

nginx compiles quickly enough that a script for "service nginx reload" could recompile and replace the binary, and it will only be a little slower than "service apache reload" will be.

It's like a sausage, you can enjoy eating it without seeing how it's made.

Can Apache or other httpd's do the same live upgrading trick that Nginx has? Seems like a really wild feature.

I don't think any other popular http server support this. If there's a web server written in Erlang, you can be sure that is available (it's a core Erlang feature).

But apache can let you load a new .so without recompiling (or even restarting) the main server, which, for most intents and purposes, gives you equivalent functionality.

Actually, nginx recompiles very quickly from the couple times I've done it (at least compared to apache/php).

But I bet for developing modules, loading standalone is a huge help.

I think this sub-thread may be missing the point that on a production server you may not have installed the whole toolchain required to re-compile your webserver so dynamic module support is actually kind of a bigger deal than you might think.

Well, the idea solution is that you don't compile things directly on your web server. There's no reason you can't compile it on a workstation and package it for deployment to production. Consider what you would be doing if you had a cluster of web servers. Would you compile manually on each server, or create a package (rpm/deb/tgz/etc) and deploy?

No. But as I pointed out above, Apache comes with 67 modules out-of-the box on Debian, which means you're much less likely to need a custom package, as opposed to the (relative) hassle with nginx. This is why I very much look forward to seeing nginx with reloadable modules.

Where do you compile your modules and how is deploying a loadable module any different than deploying a new nginx binary?

Well, the point is, Apache comes with enough modules that I never had any need to actually go and compile a custom one. And since they can be loaded at runtime, in terms of memory you only pay for what you use.

I haven't used nginx often, but the default Debian nginx doesn't come with many things included, I find.

Many large Chinese video sites have used Tengine: tudou.com, 56.com, pptv.com etc.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact