If you’re looking to host a website or web application, setting up a reliable server stack is essential. Nginx, PHP, and MySQL provide a powerful combination for serving dynamic content efficiently. This guide will walk you through setting up Nginx, PHP, and MySQL on a Linux VPS from scratch.
Prerequisites
Before starting, ensure you have:
- A VPS: A reliable VPS provider like Hosteons.
- Linux OS: Ubuntu 20.04 or Debian 11 (other distributions may require slight adjustments).
- Root Access: Administrative privileges on your server.
Step 1: Update Your Server
To ensure you have the latest packages and security patches, update your system:
sudo apt update && sudo apt upgrade -y
Step 2: Install Nginx
Nginx is a lightweight, high-performance web server. Install it with the following command:
sudo apt install nginx -y
After installation, start and enable Nginx to run at boot:
sudo systemctl start nginx
sudo systemctl enable nginx
You can check if Nginx is running by visiting your server’s IP address in a web browser. You should see the default Nginx welcome page.
Step 3: Install MySQL
MySQL is a popular relational database management system used for storing application data. Install it using:
sudo apt install mysql-server -y
Once installed, secure the MySQL installation by running:
sudo mysql_secure_installation
Follow the prompts to set a root password, remove test databases, and disallow remote root logins for added security.
Step 4: Install PHP
PHP is a server-side scripting language used for dynamic web content. To install PHP along with necessary extensions, run:
sudo apt install php-fpm php-mysql -y
Step 5: Configure Nginx to Use PHP
By default, Nginx does not process PHP files. You need to configure Nginx to pass PHP requests to the PHP processor.
- Open the default Nginx server block configuration:
sudo nano /etc/nginx/sites-available/default
- Modify the file to include the following settings:
server {
listen 80;
server_name your_domain_or_IP;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
- Save and exit the file, then test the Nginx configuration:
sudo nginx -t
- Reload Nginx to apply the changes:
sudo systemctl reload nginx
Step 6: Test PHP
Create a test PHP file to ensure everything is working:
sudo nano /var/www/html/info.php
Add the following content:
<?php
phpinfo();
?>
Save and exit the file. Visit http://your_server_ip/info.php
in your web browser. If PHP is correctly configured, you will see a PHP information page.
Step 7: Secure Your Setup
- Remove the PHP Info File: Once you confirm PHP is working, delete the
info.php
file to prevent unauthorized access:
sudo rm /var/www/html/info.php
- Set Up a Firewall: Allow HTTP and HTTPS traffic while blocking unused ports:
sudo ufw allow 'Nginx Full'
sudo ufw enable
- Enable SSL: Secure your site with HTTPS using a tool like Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain
Follow the prompts to set up SSL certificates.
Conclusion
You now have a fully functional server running Nginx, PHP, and MySQL, ready to host your website or application. This stack provides a robust, secure, and efficient foundation for your web hosting needs. If you’re using Hosteons’ VPS, you can take advantage of their reliable performance and support to ensure your setup runs smoothly.