Update, upgrade Debian and install Nginx
#sudo apt-get update && sudo apt-get dist-upgrade #sudo apt-get install nginx
Configure UFW firewall to allow Nginx services
#sudo apt-get install ufw #sudo ufw enable #sudo ufw allow 'Nginx HTTP' #sudo ufw allow ssh #sudo ufw status
You should see allowed services (Nginx, SSH, etc) in the displayed output:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Test the Nginx web server on browser http://server_domain_or_IP
Install MySQL , Follow the instructions, choose Y
#sudo apt-get install mysql-server #sudo mysql_secure_installation
Install PHP for Processing
Since Nginx does not contain native PHP processing like some other web servers, we will need to install fpm
, which stands for “fastCGI process manager”. We will tell Nginx to pass PHP requests to this software for processing. Open /etc/apt/sources.list
in your text editor:
#sudo vim/etc/apt/sources.list
Append the contrib
and non-free
repositories at /etc/apt/sources.list
deb http://cloudfront.debian.net/debian jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb http://cloudfront.debian.net/debian jessie-updates main contrib non-free
#sudo apt-get update #sudo apt-get install php5-fpm php5-mysql
** Choose additional PHP Extension to install as follows
#apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
Secure PHP components
#sudo vim /etc/php5/fpm/php.ini
Uncomment cgi.fix_pathinfo and change conditions to “0”
cgi.fix_pathinfo=0
Restart our PHP processor by typing:
#sudo systemctl restart php5-fpm #/etc/init.d/php5-fpm restart
Configure Nginx to Use the PHP Processor
Open the default Nginx server block configuration file by typing:
#sudo vim /etc/nginx/sites-available/default
Currently, with the comments removed, the Nginx default server block file looks like this:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } }
We need to make some changes to this file for our site.
- First, we need to add
index.php
as the first value of ourindex
directive so that files namedindex.php
are served, if available, when a directory is requested. - We can modify the
server_name
directive to point to our server’s domain name or public IP address. - For the actual PHP processing, we just need to uncomment a segment of the file that handles PHP requests. This will be the
location ~\.php$
location block, the includedfastcgi-php.conf
snippet, and the socket associated withphp-fpm
. - We will also uncomment the location block dealing with
.htaccess
files. Nginx doesn’t process these files. If any of these files happen to find their way into the document root, they should not be served to visitors.
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name your_server_ip; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /\.ht { deny all; } }
Test your configuration file for syntax errors by typing:
#sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
If any errors are reported, go back and recheck your file before continuing.
When ready, reload Nginx to make the necessary changes:
#sudo systemctl reload nginx
Create a PHP File phpinfo() to Test Configuration
#vim /var/www/html/info.php
Open at browser http://server_domain_or_IP/info.php