Post Date: December 26, 2016
Last Updated: September 30, 2026
Introduction
This article explains how to install and configure Nginx, PHP 7.0, and MariaDB on Ubuntu 16.04.1. The setup uses an AWS Ubuntu server and covers the basic configuration required to run PHP-based web applications with Nginx. It also includes securing the MariaDB installation, configuring PHP-FPM, enabling PHP processing in Nginx, and configuring URL rewriting for applications that require it.
Prerequisites
Before proceeding with the installation, ensure the following requirements are met:
- An AWS EC2 instance running Ubuntu 16.04.1.
- Root or sudo access to the server.
- A stable internet connection to download the required packages.
- Basic knowledge of Linux commands and package management.
- Basic understanding of Nginx, PHP, and MariaDB.
- Port 80 (HTTP) should be allowed in the server’s security group or firewall to access the web application.
- Sufficient permissions to modify Nginx and PHP configuration files.
Implementation
In this post, we are gonna explain how to install Nginx, PHP, and MariaDB on Ubuntu 16.04.1. We have used an AWS Ubuntu server in this article.
apt-get install nginx
Start the Nginx service.
systemctl start nginx
Enable the service on startup so that it will start automatically whenever the server reboots.
systemctl enable nginx
Install MariaDB server on the host
apt-get install mariadb-server
Start the MySQL service.
systemctl start mysql
Secure the MySQL service
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.Enter current password for root (enter for none):
OK, successfully used password, moving on…Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.Remove anonymous users? [Y/n] y
… Success!Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.Disallow root login remotely? [Y/n] y
… skipping.By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.Remove test database and access to it? [Y/n] y
– Dropping test database…
… Success!
– Removing privileges on test database…
… Success!Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.Reload privilege tables now? [Y/n] y
… Success!Cleaning up…
All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.Thanks for using MariaDB!
Enable the service on startup.
systemctl enable mysql
Install PHP, php-fpm, and basic required modules.
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext php7.0-zip php7.0-fpm php7.0 php7.0-dev
Edit cgi.fix_pathinfo to 0 in php.ini.
vi /etc/php/7.0/fpm/php.inicgi.fix_pathinfo=0
Start & add the php7.0-fpm service to the reboot safe.
systemctl enable php7.0-fpm
systemctl start php7.0-fpm
Enable PHP in the Nginx configuration. Uncomment the following lines on /etc/nginx/site-available/default
vi /etc/nginx/sites-available/default
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
Restart Nginx for the changes to take effect.
systemctl restart nginx
Create a phpinfo page at/var/www/html/info.php
cat > /var/www/html/info.php
<?php
phpinfo();
?>
Press Ctrl + D to save the file.
Access the IP address in the browser: “http://lPADDRESS/info.php”
Enable the rewrite module:
Some applications require the rewrite module to be enabled. Enabling such settings in nginx is pretty simple. Open /etc/nginx/sites-available/default and modify the line below.
From,
try_files $uri $uri/ =404;
To,
try_files $uri $uri/ /index.php?$args;
Restart Nginx to take the changes into effect.
systemctl restart nginx
Conclusion
By following the steps in this article, you can install and configure Nginx, PHP 7.0, and MariaDB on Ubuntu 16.04.1. The article also demonstrates how to secure the MariaDB installation, configure PHP-FPM with Nginx, verify PHP using a phpinfo() page, and enable URL rewriting for PHP applications. This provides a basic web server environment suitable for hosting PHP-based applications on an Ubuntu server.
FAQs
1. How do I install Nginx on Ubuntu 16.04.1?
You can install Nginx using apt-get install nginx, then start and enable the service using systemctl start nginx and systemctl enable nginx.
2. How do I install MariaDB on Ubuntu 16.04.1?
Install MariaDB using apt-get install mariadb-server. After installation, start the MySQL service and run mysql_secure_installation to secure the database server.
3. How do I install PHP and PHP-FPM on Ubuntu 16.04.1?
You can install PHP 7.0, PHP-FPM, and the required PHP modules using the apt-get install command provided in the article.
Related Articles
How to install MySQL 8.0 on CentOS 7
MySQL Installation on Windows Server 2012
Talk to our experts
Looking for the right technology solution for your business?. Our experts can help with web hosting, domain registration, DevOps and cloud, software development, web applications, mobile applications, and enterprise solutions. Get in touch with our team here.