Hacker News new | ask | show | jobs
by pilif 5549 days ago
For me and this big PHP application of ours, switching from just Apache to nginx in front of Apache for PHP execution and serving the rest directly with nginx was the one optimization that brought the best bang for the buck over all the years.

Memory usage went down drastically and response times got much better.

Additionally, I personally much prefer the syntax of the nginx configuration file (though this really is a matter of taste) and it generally feels like much more of the really cool stuff is built right in (I'm looking at you, memcached module).

As such, I love nginx and I would recommend it to anybody asking me what lightweight web server to use.

Note though that the performance improvements I listed above are not as such specific to nginx: You could probably achieve the same result with any other web server that isn't also your application server. What is specific to nginx is its stability, its nice (for my taste) configuration language and the availability of really interesting modules right in the core.

Congratulations to everybody for reaching 1.0. I'm looking forward to many happy years with your awesome tool in my utility belt.

2 comments

I despise having to configure web servers, but a few months ago I had to set one up on my server and I chose nginx. It was a breeze to set up (though occasionally I still struggle when I need something new in the config of a specific site, but I can usually figure it out reasonably quickly and am usually surprised by how straightforward it really is (once you know how)). So far, its done everything I want and then some.

tldr; I hate web server, but I like nginx.

Congratulations to the team indeed. I'm setting up my next project in this configuration as well and I've found nginx to be a very sweet server. I'll be serving a lot of javascript and css, but using php to handle the utility chores of accessing mysql and couchdb. Even though I'm keeping the apache back-end for this, I confess it's more out of comfort and laziness (and the rush to get it out) than because of some profound technical insight on my part.
for me the reason to stay with an apache/mod_php backend was very bad experience I had with fastcgi back in the 2006/2007 area where I was using a lighttpd/fastcgi configuration.

I've seen crashes in lighty, crashes in fastcgi and subtle differences in behavior between fastcgi and mod_php.

FastCGI just wasn't a commonly used method of deployment back then, so there were for sure some bugs around that I didn't have time or interest to fix.

By now, there's PHP-FPM and fastcgi is much more common, so you could probably just hook php directly into nginx by now, but I didn't want to do experiments and I knew that apache worked, so that's what I used.

Just remember to turn off keep-alive in apache, btw.

There was a bit of chatter recently about ill-configured nginx-fastcgi servers having a php vulnerability. Seems to be summed up here:

https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-an...

Thanks for the keep-alive tip. I missed that one.

EDIT: I see that the author of the post I linked replied below- also with the link.

I use nginx with PHP-FPM on multiple sites and have been quite happy with the results.
I'd say it's fairly stable, as (IIRC) WordPress.com is all run off nginx.
It really is trivial to set up an fcgi process to run PHP directly from nginx.

On the nginx side, something like my config: location ~ \.php { fastcgi_index index.php; include fastcgi_params; fastcgi_pass localhost:55155; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }

Then you just need to run php in fcgi daemon mode which is built in, use php-cgi -b localhost:55155 to match that setup... more details on http://wiki.nginx.org/PHPFcgiExample

I found this much simpler than running nginx and apache...

If you do that, you have to be very careful. I actually did a writeup about this a few days ago that I posted on HN: https://nealpoole.com/blog/2011/04/setting-up-php-fastcgi-an...

tl:dr is that the configuration you're suggesting will leave a site open to arbitrary code execution if the site allows for user uploads.

Thats not a full config, I did reference the documentation. I have a try_files line, as fcgi runs locally as it happens.
Just use PHP-FPM instead, it's easier and scales better. I run PHP, Django/Python and Perl without a problem at a single domain. NGINX allows to run almost anything as long as you are able to attach the socket of what you want to output towards NGINX.
A socket is probably faster.
Not really the bottleneck if you are running PHP. Linux optimises most of tcp out over the loopback device anyway.
I ran into a problem with a tcp connection to php-fpm just some weeks ago: The Server served requests at a rate of about 400req/s for some time without a single problem, until I ran out of useable ports. You won't have this problem with sockets.
Is it really a team? I thought it was just Igor Sysoev :)