Comments on Installing PHP 5.3, Nginx And PHP-fpm On Ubuntu/Debian
Installing PHP 5.3, Nginx And PHP-fpm On Ubuntu/Debian Since Apache is most of the time a memory hungy process, people started to look for different ways to host their website. Apache is clearly not the only webserver available. A few good examples are lighttpd and nginx. In this tutorial I will show you how to install it on your Ubuntu server. This tutorial also applies to Debian, though. There is only a very small difference.
24 Comment(s)
Comments
I wonder which Ubuntu version you based this on, as php5-fpm is not yet available with current Ubuntu. (9.10)
Good totorial anyhow, given you have the package available.
Within [/etc/nginx/sites-enabled/default]
I had to change:
fastcgi_pass backend;
to
fastcgi_pass 127.0.0.1:9000;
Not sure why, but it worked after that.
Yes, this is a minor part of the config I forgot to post. It has been modified in the tutorial, thanks!
The reason I use a "backend" section is to make it a bit more tidy and adding the possibility of extra PHP parsing servers.
this tutorial is very helpful, but my problem is, the server is not accepting HTTP GET variables more than 512 char long. i searched a lot but not able to find solution.
please help me
Can use in debian lenny?
I can't use php on nginx.
Thanks,
thaicla
debian lenny with dotdeb.org php53 repository.
Tyrael
You can use either Ubuntu or Debian, as long as you're able to use the DotDeb repository.
Hopefully php-fpm will become a package in the main repositories, in that case you could use those. Until then, dotdeb will do.
offtopic: Its nice to see people using something different from apache... i used to use it... i remember the first thing i did after installing it.. was removing *every* unnecesary module (I dont know why, its very common to have many shit that you probably will never use... and in fact, just gives security holes to any newcomer...) *greets*
i get this
pizza:/etc/nginx/sites-available# /etc/init.d/nginx restart
Restarting nginx: 2010/04/27 18:40:56 [emerg] 2820#0: unknown directive "fastcgi_split_path_info" in /etc/nginx/sites-enabled/default:21
im using exactly the same configuration file (default) as you.
Me too. I have same problem. How to fix it?
Please...
fastcgi_split_path_info was introduced around nginx version 0.7.31. Are you using an older version? You may need to comment that out or upgrade nginx if you need that functionality.
Hi I followed the tutorial using Ubuntu 10.04. First issue I encountered is that Lucid's php5-common package installs an Ubuntu specific version and php-fmp depends on other version, I solved it using dpkg to install php5-fmp ignoring dependencies. Now the problem is when i point the browser to index.php i get this message: No input file specified. Thanks for this tutorial Macario
Regarding Lucid: to give precedence to the php5 dotdeb packages, the following worked for me...
sudo apt-get install php5-common=5.3.2-0.dotdeb.2 php5-cli=5.3.2-0.dotdeb.2 php5-suhosin=5.3.2-0.dotdeb.2
Obviously, check the versions first: http://php53.dotdeb.org/dists/stable/php5/binary-i386/
-
To those working with Ubuntu 10.04 (Lucid Lynx), you must ignore the deb item in the sources.list in the above tutorial, and skip all the steps relating to manually installing packages with dpkg. I tried this earlier and got it working, but I had to dkpg --ignore-depends , which resulted in a stubbornly broken apt-get with unmet dependencies. Here is the fix:
- deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
- deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
I have automated nginx + php5 + php5-fpm setup on ubuntu 10.4 lucid with my scripted install. It is available freely under GNU GPL 3.0 at http://www.initcron.org/how-tos/autoinstall-nginx-web-server-with-php-on-ubuntu-10-4-lucid
This takes care of most of the steps above.
I had some problems with links and redirects (in phpbb) when I used a setup similar to what you're describing. I had more success by using the root parameter instead of concatenating the path into SCRIPT_FILENAME. The config that works the best for me is something like:
location ~* \.php{ root /var/www-bfg; fastcgi_pass 127.0.0.1:9000; #other parameters here }
I agree. I've been looking at various nginx configurations and any time I see the "big ol' list of fastcgi_... options" or someone using 'if (-e ...)' instead of 'try_files', I run away. Far, far away. I'm quite convinced that there isn't a single person publishing tutorials like this on nginx that actually knows how to create a functional configuration file. The problem seems to stem from Igor's (the author of nginx) inability to follow his own rules for the default, shipping configuration combined with the lack of centralized documentation that is easy to follow. There is a Wiki that is semi-useful but even the examples within the Wiki break the rules more often than not.
When I say "break the rules", I mean violations of the official "if is evil" and "common pitfalls" documentation in the nginx Wiki.
From what I've gathered, nginx is faster for two reasons:
- The default out-of-the-box installation isn't laden down with unnecessary modules. Supposedly, Apache compiled for mpm-worker mode (default is mpm-prefork) can be configured to be just as fast as nginx when the unnecessary modules are stripped out.
- nginx doesn't touch the filesystem unless it is told to. It is first a lightweight proxy server and second a web server while Apache is the reverse. nginx was designed to be, in essence, a load balancer. The approach is interesting because not touching the file system has the advantage of not having the physical files on the same box as the server. 'try_files', in this context, appears to have been introduced because people are using nginx as a web server. But, more importantly though, this security vulnerability is in most nginx + PHP configurations found throughout the Internet. When you think about it, there is no good way to fix it either except on a case-by-case basis using extra checks in each and every virtual host that allows PHP scripts to run or to run nginx as a lightweight proxy server that passes requests onto Apache - which has its own difficulties (e.g. dealing with remote IP addresses in PHP).
The lack of .htaccess support means that making changes requires modifying the configuration file, which means nginx probably won't work well in a hosting environment where people are used to having .htaccess available at the subdirectory level.
And the unfixable PHP security vulnerability is a head-spinner.
In essence, nginx is a special-purpose server that is only practical when there are extremely large loads to be handled for a single domain combined with a really intelligent system administrator.
Totally agree but...
"In essence, nginx is a special-purpose server that is only practical when there are extremely large loads to be handled for a single domain combined with a really intelligent system administrator."
Not even close. Nginx is hugely useful for quick reverse proxies even on tiny servers with several low volume sites.
Why are you overwriting fastcgi_param variables that have been included already?
When I see somebody doing things like this, I get the idea that the guy not really wrote the config line by line for himself - maybe he is not even knwoing exactly what he is doing! And all you rabbits are just blindly running into his direction?
Love it - brilliant tutorial, got me online within minutes.
Considering the never-ending messing around I've had to do with nginx + php in the past, this is pure quality.
Running latest Debian, latest PHP.
Since Ubuntu 11.04 is bundled with PHP 5.3, installation is as simple as:
sudo apt-get install php5-fpm php5-cli php5-common
First of all, my thanks for this great website of yours. It has saved me days!
Please update your article.
I was having this error message
Reading package lists... Done
W: GPG error: http://php53.dotdeb.org stable Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY E9C74FEEA2098A6E
sudo apt-get update
gpg --keyserver keys.gnupg.net --recv-key 89DF5277
gpg -a --export 89DF5277 | sudo apt-key add -
You can replace the dependencies and sources.list editing with:
sudo add-apt-repository ppa:nginx/php5
Free nginx eBook: http://www.heronote.com/files/nginx.htm