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)

Add comment

Please register in our forum first to comment.

Comments

By: Daniel

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.

By: Anonymous

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.

By:

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.

By: Aswani

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

 

By: thaicla

Can use in debian lenny?

I can't use php on nginx.

Thanks,

thaicla

By: Tyrael

debian lenny with dotdeb.org php53 repository.

 Tyrael

By:

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.

By: Anonymous

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*

By: Anonymous

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.

By: fauzievolute

Me too. I have same problem. How to fix it?

 Please...

By: Anonymous

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.

By: Macario

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

By: Matt

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/

 

By: Anonymous

    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:
Instead put these in sources.list
  • deb http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
  • deb-src http://ppa.launchpad.net/brianmercer/php/ubuntu lucid main
And at then run this:
  • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8D0DC64F
  • sudo aptitude update
  • sudo aptitude install php5-fpm
  • By: Initcron

    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.

    By: Cristian Vrabie

    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
     }
    

    By: Anonymous

    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:

    1. 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.
    2. 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.

    By: Anonymous

    "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."

    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.

    By: Longodongo Peepvalue Bruttfotz

    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? 

    By: Ellis Grouse

    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.

     

    By: Kuba

    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

    By: Wladimir Tavares

    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

    According to http://www.dotdeb.org/2010/07/11/dotdeb-packages-are-now-signed/ their packages are signed. 
    You need to to import dotdeb repository keys before the update
    sudo apt-get update

    Please add this two commands before the update.

    gpg --keyserver keys.gnupg.net --recv-key 89DF5277

    gpg -a --export 89DF5277 | sudo apt-key add -

     

    By: Anonymous

    You can replace the dependencies and sources.list editing with:

    sudo add-apt-repository ppa:nginx/php5

    By: heronote

    Free nginx eBook: http://www.heronote.com/files/nginx.htm