What is the easiest way to enable PHP on nginx?

  • What is the easiest way to enable PHP on nginx on Ubuntu 12.04?

    Best solution is the one that request minimal work, ideally just a package installation :)

  • papashou

    papashou Correct answer

    8 years ago

    The following method will get you started fast on Ubuntu 12.04:

    Install the dependences:

    sudo apt-get install php5-common php5-cli php5-fpm

    Install nginx:

    sudo apt-get install nginx

    Start nginx:

    sudo service nginx start

    Test that it's working (should see "Welcome to nginx!")

    sudo service nginx stop

    In your nginx site configuration (/etc/nginx/sites-available/default), modify the line in the server {} section

    index index.html index.htm to index index.php index.html index.htm.

    Uncomment the lines in the server {} section starting with

    listen for ipv4 / ipv6 both.

    Scroll down to where it says location ~ \.php { and uncomment lines so it looks like this:

    location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include fastcgi_params;
    }
    

    sudo service php5-fpm restart sudo service nginx restart

    Your default web root is located at /usr/share/nginx/www (per the config file). (See root /usr/share/nginx/www;

    (Note: For Ubuntu 12.10 or newer, you will need to replace the fastcgi_pass 127.0.0.1:9000; line with this to make it work: fastcgi_pass unix:/var/run/php5-fpm.sock;)

    As a late side note, you can make 12.04 use a UNIX socket like 12.10+ does by editing `/etc/php5/fpm/pool.d/www.conf` and changing the listen line to `listen = /var/run/php5-fpm.sock`, then using the line @ThomasW. mentioned.

    @Powerlord the NGINX default setup has both lines and explains the difference between the two, rather than having to change how PHP runs you can just change the config line in NGINX faster, and all works.

    @ThomasW. The NGINX defaults setup's description of both lines is also wrong in 12.04. php5-fpm requires the first method due to how php5-fpm is configured in 12.04. It didn't change to the second method until 12.10. To make php5-fpm work with nginx as documented, you have to modify fpm's www.conf as mentioned in my previous message.

    @Powerlord You're right it's a problem, one that can be fixed by changing the documentation in the default config file. See this bug that I created on this issue. I haven't had a chance to propose a bugfix yet.

    after installing php, uncommenting right settings and restarting nginx I still face the problem that the server sends me the PHP files instead of executing them. What could I possibly be doing wrong?

    This is not working for me on ubuntu 14.04. nginx says "An error occured, the page you are looking for is not found", what to do?

    Could you show a complete working config file? It's hard to be sure about ordering.

    The current default (using Ubuntu 16.04 and PHP-FPM 7.0) listens at `/run/php/php7.0-fpm.sock`. To determine this value yourself, you should check the `listen` directive at `/etc/php/7.0/fpm/pool.d/www.conf`.

  • EDIT: As pointed out by Matt Browne you may be interested by this more recent post:
    How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04


    The papashou's answer is correct on old Ubuntu 12.04. Since Ubuntu 12.10, the configuration is a bit different. Here is what I did:

    Install

    sudo apt-get install nginx php5-fpm
    

    Enable PHP

    Uncomment the following lines in configuration file /etc/nginx/sites-available/default

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    
    #   # With php5-cgi alone:
    #   fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
    

    Start (or restart)

    sudo service php5-fpm restart
    sudo service nginx restart
    

    Test nginx

    Opening this link http://localhost should display "Welcome to nginx!"

    Test php

    Create a php file:

    • The target path is the output of

      awk -F' |;' '/^[^#]*root/ {print $2}' /etc/nginx/sites-available/default
      

      e.g. /usr/share/nginx/www

    • Write a info.php file with:

      echo '<?php phpinfo(); ?>' | \
          sudo tee /usr/share/nginx/www/info.php
      

      or as one-liner

      echo '<?php phpinfo(); ?>' | \
          sudo tee "$(awk -F' |;' '/^[^#]*root/ {print $2}' /etc/nginx/sites-available/default)/info.php"
      

    Opening http://localhost/info.php should display the PHP information page.

    Thanks for this. Here's another helpful link: https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04. And note that if you want to install MySQL, you'll also need to run `apt-get install php5-mysql` (in addition to installing MySQL itself).

  • sudo apt install nginx php-fpm
    

    Note the fpm version, or check php -v. 7.3.11-0ubuntu0.19.10.3 (cli) in my case.

    sudo nano /etc/nginx/sites-available/default
    
    1. Set the correct root folder.

    2. Add index.php to the index directive.

    3. Uncomment the location handler for php, but leave the "php-cgi" line commented if you use php-fpm. Also ensure the correct fpm version lest you get "502 Bad Gateway" on localhost: fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;

    sudo service nginx restart
    

    That works on:

    $ nginx -v
    nginx version: nginx/1.16.1 (Ubuntu)
    $ uname -a
    Linux cees-XPS-13-9380 4.15.0-1067-oem #77-Ubuntu SMP Mon Jan 20 09:23:07 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    

    How does this add anything that the other answers don't touch upon?

    The fpm version and no outdated config.

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM