Update! Configure Nginx to Read PHP on Ubuntu 16.04
Nginx is an open source Linux web server that accelerates content while utilizing low resources. Known for its performance and stability Nginx has many other uses such as load balancing, reverse proxy, mail proxy, and HTTP cache. Nginx, by default, does not execute PHP scripts and must be configured to do so. In this tutorial, we will show you how to enable and test PHP capabilities with your server.
Pre-Flight Check
- This article assumes you are logged in as root and using Ubuntu 16.04 LTS server. If not logged in as root, please add sudo before each command or login as root user.
- This article also assumes you have installed Nginx. If you have not yet installed Nginx or are unsure how to do so, please reference this easy to follow article.
- This article is tested using NGINX 1.10.3+, older versions should work, but it’s a good idea to update to the latest version if available before you try to configure PHP.
- This article will be running php7.0-fpm or later (as of Dec 31, 2018, PHP 5.6 will be approaching “end of life” and no longer supported.)
Step 1a: Give Me the Packages!
First, we want to make sure our manager is up-to-date. Run the following command
sudo apt-get update && apt-get upgrade
You also want to make sure that your Nginx is up-to-date. You can check the current version by running this command. nginx -v
The result should return something like this.
This article will NOT cover updating your Ngnix as its focus is for PHP configuration. sudo cp /etc/nginx/nginx.conf / etc/nginx/nginx.conf.1.x.x.backup
You can test your NGINX configuration file for syntax errors with the following command
nginx -t
If successful you should get something similar to the following
Using nginx -t should also give you a starting point to look for errors if for some reason this was unsuccessful it will return an error.
sudo systemctl stop nginx.service
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
sudo systemctl restart nginx.service
Step 1b: PHP Version Check
Now it is time to check that your PHP version is running and using the correct version. You can do so with the following:
sudo systemctl status php7.0-fpm
You will see something similar to this if working properly:
Replace 7.0 with whatever version of PHP is the most recent. You can check for updates here. Alternatively, if you need to update PHP to the latest version, please be sure you make a backup BEFORE any changes then run the following:sudo apt-get -y install php7.0 php7.0-fpm
sudo apt-get upgrade
Step 2:Time for Some NGINX Configuration
Once you have verified that both PHP and Nginx are running on your system, it’s time to configure your PHP settings!
From home cd into your NGINX folder
cd ~
cd /etc/nginx
To configure your NGINX PHP settings. Cd into the etc/php folder.
cd etc/php/
Depending on which PHP version you are using the following folders may differ. This article is using PHP 7.0. You can replace the 7.0 with the version of PHP you are using. We are looking for a file called the php.ini file.
On PHP 7.0 and 7.1 that is located at :
vim 7.0/fpm/php.ini
Or
vim 7.1/fpm/php.ini
The php.ini is a giant file but it’s where you can customize your environment. If this is your first time, it might be a good idea to make a copy of this file BEFORE you make any changes.
cp php.ini php.ini_copy
However, if you are pro and just like to read articles for the warm fuzzies you feel inside, then go ahead and edit away!
Here are a couple of the recommended values for the php.ini file.
max_execution_time = 300
max_input_time = 60
memory_limit = 256M
upload_max_filesize = 100M
Simply find these variables in the file and update the values.
Before Edit :
After edit:
Step 2b: Default Sites Configuration
We are almost done! Now it is time to set your default sites environment. Open your sites configuration file. It should be stored by default at the following path.
/etc/nginx/sites-available/default
You can cd there or open it right up with vim.
You want to remove the following commented out lines. Here is an example for both PHP7.0 and PHP 7.1
PHP 7.0
#
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php7.0-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php7.0-fpm:
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
PHP 7.1
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
}
Step 3: Testing PHP on NGINX
Once you have made the necessary edits go ahead and restart NGINX and PHP with the following lines.
sudo systemctl restart nginx.service
To test your PHP configuration by creating a phpinfo.php file in the /var/www/html file path.
sudo vim /var/www/html/phpinfo.php
Add the following inside the file and save :
<?php phpinfo( ); ?>
To test your setup go to your server IP followed by /phpinfo.php in your web browser.
http://localhost/phpinfo.php
If you see the following then kick back and relax because you are all done! Congrats you deserve it!
Related Articles:
About the Author: Michelle Almendarez
Michelle Almendarez started her love for technology at the University of Texas at San Antonio where she pursued a degree in Computer Science . She has written several Knowledge Base articles for Liquid Web starting in 2018. She has experience with video editing, web design and server management and in her free time likes to post cute pictures of her dog “Ghost” on Facebook . She sustains her healthy lifestyle by eating only organic farm raised tacos with her coffee daily.
Our Sales and Support teams are available 24 hours by phone or e-mail to assist.
Latest Articles
How to Edit Your DNS Hosts File
Read ArticleHow to Edit Your DNS Hosts File
Read ArticleMicrosoft Exchange Server Security Update
Read ArticleHow to Monitor Your Server in WHM
Read ArticleHow to Monitor Your Server in WHM
Read Article