DEV Community

Cover image for Setting Up Nginx for Laravel: A Comprehensive Guide
Vinayak Kalushe
Vinayak Kalushe

Posted on

Setting Up Nginx for Laravel: A Comprehensive Guide

Introduction

In the ever-evolving world of web development, Laravel has consistently secured its position as one of the most popular PHP frameworks. Its elegant syntax, extensive set of features, and robustness have made it a favorite among developers world over. However, to bring a Laravel application to life, a server is needed. This is where Nginx comes in.

Nginx is a high-performance HTTP server that is known for its stability, rich feature set, simple configuration, and low resource consumption. Nginx can be efficiently configured for Laravel, hence making it a suitable choice for running Laravel applications. This blog post aims to guide you through the process of setting up Nginx for Laravel. It will cover the steps involved in installing Nginx, configuring Laravel, and setting up Nginx to work with Laravel.

Installing Nginx

Before we can configure Nginx for Laravel, Nginx itself needs to be installed on the server. This guide will focus on installing Nginx on a Ubuntu machine. This can be accomplished by executing the following commands in the terminal:

sudo apt update
sudo apt install nginx

Enter fullscreen mode Exit fullscreen mode

These commands update your package lists for upgrades and new package installations followed by the installation of Nginx. After the installation is complete, it's crucial to verify that Nginx was installed correctly. You can do this by checking the version of Nginx installed on your server. To check the Nginx version, use the command nginx -v. If Nginx has been installed successfully, the version number will be displayed.

Installing PHP

Before Laravel can run on your Nginx server, you need to install PHP and PHP-FPM (FastCGI Process Manager). PHP-FPM is an alternative PHP FastCGI implementation with some additional features useful for sites of any size, especially busier sites. Here is how you can install PHP and PHP-FPM on Ubuntu:

Install PHP and PHP-FPM. If you want to install a specific version of PHP, replace 'php' with the version you want to install. For example, if you want to install PHP 7.4, you would use 'php7.4' and 'php7.4-fpm':

sudo apt install php php-fpm php-mysql
Enter fullscreen mode Exit fullscreen mode

After the installation is complete, you can verify that PHP and PHP-FPM have been installed correctly by checking their versions. Use these commands to check the PHP and PHP-FPM versions:

php -v
Enter fullscreen mode Exit fullscreen mode

If PHP and PHP-FPM have been installed successfully, the version numbers will be displayed.

Php Version

Laravel Configuration

Before we jump into configuring Nginx, it's essential that your Laravel project is set up and ready. If you haven't yet created a Laravel project, you can do so by executing the command composer create-project --prefer-dist laravel/laravel blog, where 'blog' is the name of your project.

After creating a Laravel project, it's imperative to set the appropriate permissions for the storage and bootstrap/cache directories to ensure that Laravel functions correctly. Use the following commands to set these permissions:

sudo chown -R :www-data /path/to/your/laravel/root/directory
sudo chmod -R 775 /path/to/your/laravel/root/directory/storage
sudo chmod -R 775 /path/to/your/laravel/root/directory/bootstrap/cache
Enter fullscreen mode Exit fullscreen mode

Remember to replace '/path/to/your/laravel/root/directory' with the actual path to your Laravel project.

Configuring Nginx for Laravel

Create a New Configuration File

Navigate to Nginx's sites-available directory and create a configuration file for your project:

sudo nano /etc/nginx/sites-available/your_domain.com
Enter fullscreen mode Exit fullscreen mode

Configuration File Content

Paste the following configuration, adjusting your_domain.com, the root directory, and the PHP version as necessary:

server {
    listen 80;
    server_name your_domain.com;
    root /var/www/your_domain.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
Enter fullscreen mode Exit fullscreen mode

Enabling Your Site and Restarting Nginx

Enable the Site

Link your site to Nginx's sites-enabled directory:

sudo ln -s /etc/nginx/sites-available/your_domain.com /etc/nginx/sites-enabled/
Enter fullscreen mode Exit fullscreen mode

Test Nginx Configuration

Ensure there are no syntax errors:

sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

Restart Nginx

Apply your changes:

sudo systemctl restart nginx
Enter fullscreen mode Exit fullscreen mode

Conclusion

While setting up Nginx for Laravel might seem like a daunting task initially, especially for beginners, it is not as complicated as it appears. Once you delve into the process and understand each step, it becomes pretty straightforward.

The crux of the setup involves three primary steps: the installation of Nginx, the configuration of Laravel, and the Nginx configuration for Laravel. A smooth and successful setup is often achieved by meticulously following these steps and paying close attention to the configurations.

Once set up, you can enjoy the benefits of a high-performance HTTP server running your Laravel applications. Happy coding, and here's to creating fantastic applications with Laravel and Nginx!

Top comments (0)