Введение
Фреймворк 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
Важно
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. Чек-лист проверки и запуска
- Проверьте синтаксис: выполните команду
sudo nginx -t. - Перезагрузите демон:
sudo systemctl reload nginx. - Проверьте защиту
.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