I‘m a new Ubuntu Linux user. How do I install the LEMP stack on an Ubuntu Linux 14.04 LTS server using command line options to serve dynamic web apps?

As one of the most popular Linux distribution in the world, Ubuntu has released the latest version on April 17, 2014. The latest version is 14.04 with code name Trusty Tahr. Ubunt 14.04 is a LTS (Long Term Support) version. This means that Ubuntu 14.04 will be supported for the next 5 years from the release date. In this tutorial we will cover Nginx, MySQL and PHP installation on Ubuntu Linux v14.04.[donotprint]
Tutorial details
Difficulty level Easy
Root privileges Yes
Requirements Ubuntu
Est. reading time 15m

What is new in Ubuntu 14.04 (Trusty Tahr) version?

You may see it on cyberciti.biz or visit the Ubuntu home page at ubuntu.com.

Nginx Installation

Nginx is one of the robust web server in Linux world. Nginx is a free, open source, high performance HTTP server and reverse proxy, as weell as an IMAP/POP3 proxy server. Now, we are going to install Nginx web server.

First, make sure system is upto date:
$ sudo apt-get update
$ sudo apt-get upgrade

#1 – Download and Install Nginx

The easiest way to download and install Nginx is using apt-get command. Here is the command:
$ sudo apt-get install nginx

Fig.01: Download and Install Nginx on Ubuntu Linux

Just wait until installation is get done on the system.

#2 – Test Nginx

Once it get done, you can open your browser and type url http://localhost or http://your_ip_address to test it. If everything goes normal, you will see Nginx welcome page:

Fig.02: Welcome nginx page on Ubuntu Linux

MySQL Installation On Ubuntu

MySQL is one of the most powerful database management system in Linux world. Next, we are going to install it with PHP support.

#1 – Install MySQL and PHP support

Type the following command:
$ sudo apt-get install mysql-server php5-mysql

Fig.03: Ubuntu Linux Install MySQL to Manage Site Data with PHP

During the installation, MySQL will ask you to enter MySQL root password, other wise the installation will not continue. Type the password you want, then press OK to continue the installation.

#2 – Test MySQL

Once mysql installation finished, we can test it. Open your console and type the following command:
$ mysql -u root -p

Fig.04: Ubuntu test Mysql installation

If you type your password correctly, the you will see the mysql prompt.

#3 – Securing access to MySQL

If we are going to use MySQL as a production database, we may want to secure it. MySQL provides a shell script to help us securing it. Just type the following command on your console:
$ sudo mysql_secure_installation
Here are the steps to do it.

1. Enter your root password

Enter your current root password to continue to the next step.

Fig.05: MySQL enter your root db password

2.Change the root password

If you want to change it, press Y. Otherwise, press N.

Fig.06: MySQL security

3.Remove anonymous user

It is recommended to remove anonymous user to mitigate risk who can log in into your database.

Fig.07: MySQL security

4.Disallow root login remotely

To make sure that no one remote your database as root from another machines, we need to disallow root login remotely.

Fig.08: MySQL security

5.Remove test database

Sometimes some MySQL installation will create a database named ëtestí for testing purpose. We can remove it if we donít use it.

Fig.09: MySQL security

6.Reload privilege tables

Then we need to reloading the privilege tables to ensure all changes made so far will take effect immediately.

Fig.10: MySQL security


Fig.11: MySQL security

PHP Installation For Server Side Scripting

Since PHP is popular, a lot of websites is built using PHP language. As of January 2013, PHP was installed on more than 240 millions websites. Now we are going to install PHP on Ubuntu 14.04

#1 – Download and install PHP

As usual, we can download and install PHP using apt-get command. Just type the following command on your Ubuntu console or over the ssh based session:
$ sudo apt-get install php5-fpm

Fig.12: Install PHP for Server Side Processing on Ubuntu

And wait for the installation to complete.

Configure Nginx to work with PHP and MySQL Server on Ubuntu

Now we have all components installed. The next step is we need to configure Nginx with PHP and MySQL. Let’s start to configure them.

#1 – Configure PHP5-FPM

PHP5-FPM configuration file is located at /etc/php5/fpm/php.ini. Open it with your text editor
$ sudo vi /etc/php5/fpm/php.ini
Change this parameter, from:
Save and close the file and then restart php5-fpm service, type:
$ sudo service php5-fpm restart

#2 – Configure Nginx

Nginx configuration file is located at /etc/nginx/nginx.conf. But basically, we don’t need to touch it. The configuration of nginx website is located in /etc/nginx/sites-available/default file.
Open it, and uncomment lines:

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

Then restart the services.
$ sudo service nginx restart
Please make sure, on Ubuntu 14.04, we cannot use fastcgi_pass So make sure that the line is commented. Otherwise, on my machine, I got this error :
$ tail /var/log/nginx/error.log
2014/11/04 16:57:04 [emerg] 3216#0: "fastcgi_pass" directive is not allowed here in /etc/nginx/sites-enabled/default:59
2014/11/04 16:58:21 [emerg] 3256#0: "fastcgi_pass" directive is not allowed here in /etc/nginx/sites-enabled/default:59

On Ubuntu 14.04, I use the following line:
fastcgi_pass unix:/var/run/php5-fpm.sock
When I restart the Nginx and I still got the following error message:

2014/11/04 17:02:05 [emerg] 3295#0: "fastcgi_pass" directive is not allowed here in /etc/nginx/sites-enabled/default:61
2014/11/04 17:04:58 [emerg] 3410#0: "fastcgi_pass" directive is not allowed here in /etc/nginx/sites-enabled/default:61

Please make sure that you already uncomment this line:
location ~ \.php$ {

#3 – Configure MySQL

After the configuration section is done, now we need to test them to make sure that our configuration is working as required. On Ubuntu 14.04 the root document folder is located in /usr/share/nginx/html. So create a file called /usr/share/nginx/html/phpinfo.php with the following code:

<? phpinfo(); ?>

After restarting PHP-FPM and Nginx, open the browser and browse to the php file, we got only a blank screen. No error message on the screen. No error message on PHP-FPM and Nginx log file.

Then we changed /usr/share/nginx/html/phpinfo.php file code on the root document of Nginx, as follows:

<?php phpinfo(); ?>

And then open the browser again and type url http://your_ip_address/phpinfo.php

It seem that by default, we can not use short php-tag like this:

<? ... your code ... ?>

To enable short php tag, we need to change the value of short_open_tag parameter on php.ini file:

Change the value from Off to On. Then restart your php5-fpm :
sudo service php5-fpm restart
Then try again to test your phpinfo file. Next, we will see if the MySQL support is enabled or not. Scroll down the php configuration screen on your browser, if you see MySQL block there, then MySQL support already enabled.

You are now ready to use Nginx, PHP5 and MySQL on Ubuntu server. I hope this quick article help anyone who wish to install Linux, Nginx, PHP and MySQL on Ubuntu 14.04.

This quick tutorial was contributed by Pungki Arianto. You can too contribute to nixCraft.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 15 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersdf duf ncdu pydf
File Managementcat cp mkdir tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Modern utilitiesbat exa
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg glances gtop jobs killall kill pidof pstree pwdx time vtop
Searchingag grep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
15 comments… add one
  • Harshad Dec 3, 2014 @ 16:48

    The easy way to do above is EasyEngine, Setup your server just in 3 commands.

  • Ricky Baratan Dec 4, 2014 @ 7:03

    Very clear instructions

  • arman Dec 19, 2014 @ 12:04

    After I edited short_open_tag to on and then restarting nginx and php5-fpm still phpinfo.php is a blank page.

    • Pungki Arianto Dec 28, 2014 @ 20:43

      Hi Arman,

      Do have any error messages on your error log file? And apparently on Ubuntu 14.04 we cannot use ” /ect/init.d/nginx restart ” command to restart nginx service. But we can use ” sudo service nginx restart”

      Hope this help.

      Thank you.

  • Koen Dec 30, 2014 @ 12:37

    Exactly the walk-through I needed. Cheerio.

    @arman first check if you don’t have multiple occurrences of that setting in your file, then make sure you rebooted php-fpm…

  • Conrad Dec 30, 2014 @ 17:27

    Try changing the fastcgi_param to the following: include fastcgi.conf; There is a slight difference, and I had the same issue. It now works for me.

  • Tomas Dec 31, 2014 @ 8:39

    Great post man, thx för sharing!

  • jnsh Jan 9, 2015 @ 11:47

    I installed nginx but when i browse the scripts are downloading, its not displays nginx welcome screen.. can some help me out from this problem?

  • Victor Mar 10, 2015 @ 1:18


    I am trying to restart php-fpm on ubuntu 14.04 using sudo service php5-fpm restart but I get an prompt saying “stop: unknown job: php5-fpm” and “start: unknown job: php5-fpm”. where as using the same command to restart nginx works. I can’t access the php info screen even after making the file with the php code. I get a 502 bad gateway error

  • Pungki Arianto Mar 11, 2015 @ 10:45

    Hi Victor,

    You may try this :
    $ sudo pkill php5-fpm
    $ sudo service php5-fpm start

    It will kill the running process and start the new, fresh one.

    Anyway, can you restart php5-fpm using :
    $ /etc/init.d/php5-fpm restart

    • Victor Mar 11, 2015 @ 23:22

      when i do the /etc/init.d/php5-fpm restart command i get a message saying “* Restarting PHP5 FastCGI Process Manager php5-fpm [fail]” Any ideas?

  • dilip Apr 1, 2015 @ 9:30

    very useful..keep posting


  • kilolo May 2, 2015 @ 5:38

    Tried to install 4 times by following steps from other blogs, all failed, this one did the trick. Very precise instructions, no garbage. You should write a book someday.

    Btw I’m running this on Amazon EC2 —> Ubuntu Server 14.04 LTS (HVM), SSD Volume Type – ami-47a23a30.

    Muchas gracias!!

  • tayphong Oct 29, 2015 @ 15:58

    how to active session in php5 on ubuntu 14.04

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum