Ссылка скопирована

Настройка Nginx для Laravel

DonVardix DonVardix

Введение

Фреймворк Laravel требует, чтобы веб-сервер смотрел строго в подпапку /public. Неправильная конфигурация Nginx приводит к ошибкам 404 на всех внутренних маршрутах, скачиванию index.php как текстового файла или критической утечке файлов .env и .git в открытый доступ.

Что будет сделано:

  • Сконфигурирован виртуальный хост Nginx с корректной директивой root и обработкой роутинга;
  • Настроена передача PHP-запросов в сокет PHP-FPM;
  • Заблокирован доступ к конфиденциальным скрытым файлам окружения;
  • Выставлены права на служебные директории storage и bootstrap/cache.

Результат: готовый к продакшену, производительный и безопасный веб-сервер для обслуживания Laravel-приложений.


1. Базовые требования к окружению

Перед созданием конфигурационного файла убедитесь, что на сервере:

  • Установлен Nginx (nginx -v);
  • Запущен сервис PHP-FPM (например, php8.4-fpm);
  • Проект развернут в /var/www/example.com, а публичная папка находится по адресу /var/www/example.com/public.

2. Создание конфигурации виртуального хоста

Создайте файл конфигурации сайта в системной директории:

sudo nano /etc/nginx/sites-available/example.com

Вставьте базовую рабочую конфигурацию (замените example.com и путь к сокету PHP на свои):

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com/public;
    index index.php;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }

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

Активируйте сайт символической ссылкой:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

3. Настройка прав на storage и cache

Веб-сервер и процесс PHP-FPM должны иметь права на запись логов, кеша сессий и представлений Blade:

sudo chown -R deploy:www-data /var/www/example.com/storage /var/www/example.com/bootstrap/cache
sudo chmod -R 775 /var/www/example.com/storage
sudo chmod -R 775 /var/www/example.com/bootstrap/cache

Важно

Никогда не выставляйте права 777 на директории Laravel. Группы www-data с правами 775 достаточно для корректной работы.

4. Разбор директив и безопасность

Понимание ключевых параметров защищает от поломок при масштабировании:

  • root /var/www/example.com/public; — корень обязан указывать на public. Это изолирует исходный код ядра и файлы .env от публичного доступа.
  • try_files $uri $uri/ /index.php?$query_string; — ключевая директива маршрутизатора. Если реального статического файла на диске нет, Nginx передает запрос в ядро Laravel.
  • location ~ /\.(?!well-known).* { deny all; } — запрещает чтение любых скрытых файлов (.env, .git), исключая служебные сертификаты Let’s Encrypt (.well-known).

Вывод

Конфигурация Nginx для Laravel развернута и защищена. Ниже приведен чек-лист ввода сайта в эксплуатацию.

1. Чек-лист проверки и запуска

  1. Проверьте синтаксис: выполните команду sudo nginx -t.
  2. Перезагрузите демон: sudo systemctl reload nginx.
  3. Проверьте защиту .env: откройте в браузере https://example.com/.env — сервер обязан вернуть 403 Forbidden или 404 Not Found.

2. Подключение SSL-сертификата

Для перевода проекта на безопасный протокол HTTPS выпустите сертификат Certbot:

sudo certbot --nginx -d example.com -d www.example.com

Утилита автоматически настроит порт 443 и добавит редирект с HTTP на HTTPS.

3. Шпаргалка команд

  • Проверка статуса Nginx: sudo systemctl status nginx
  • Просмотр ошибок сайта: sudo tail -n 50 /var/log/nginx/error.log
  • Перезапуск пула PHP-FPM: sudo systemctl restart php8.4-fpm
  • Очистка внутреннего кеша Laravel: php artisan optimize:clear