Как изменить конфигурацию nginx 1.30, чтобы корректно настроить обслуживание приложения Laravel или обычных PHP-скриптов?

Взял простой VPS для небольшого проекта и установил nginx 1.30. Заметил, что в новой версии конфиги формируются иначе — нет привычных папок sites-available / sites-enabled. Статический HTML работает, но Laravel и даже простой «hello world» приложения возвращают 502 Bad Gateway.
  • 18 апреля 2026 г. 16:02
Ответы на вопрос 3
Коротко: 502 Bad Gateway в вашем случае почти всегда означает, что nginx не может достучаться до PHP-FPM (upstream). В nginx 1.30 действительно изменён layout пакета у некоторых дистрибутивов — папок sites-available/sites-enabled может не быть, конфиги по умолчанию идут из /etc/nginx/nginx.conf и /etc/nginx/conf.d/*.conf. Ниже — чеклист и готовые примеры конфигураций, чтобы быстро починить работу Laravel / любого PHP.

1) Проверки, с которых начать
- Убедитесь, что php-fpm установлен и запущен:
  sudo systemctl status php*-fpm
- Посмотрите, на чем слушает php-fpm (socket или порт):
  grep -R "listen =" /etc/php* /etc/php-fpm* /etc/php-fpm.d 2>/dev/null
  либо откройте пул: /etc/php/*/fpm/pool.d/www.conf (параметр listen)
- Посмотрите ошибки nginx:
  sudo tail -n 50 /var/log/nginx/error.log
  В 502-случаях там будет что-то вроде "connect() to unix:/run/php/php8.2-fpm.sock failed: No such file or directory" или "connection refused".

2) Если php-fpm слушает unix-сокет
- Обычно путь /run/php/php8.*/php-fpm.sock или /var/run/php-fpm/www.sock.
- Убедитесь в правах: сокет должен быть доступен пользователю nginx (nginx или www-data). Можно изменить в пуле www.conf:
  listen.owner = www-data
  listen.group = www-data
  listen.mode = 0660
  (или добавить nginx в группу владельца сокета)
- SELinux: на RHEL/CentOS/AlmaLinux можно столкнуться с SELinux-блокировкой. Для отладки временно отключите SELinux или проверьте audit.log. Для включения сетевых подключений:
  sudo setsebool -P httpd_can_network_connect 1

3) Если php-fpm слушает TCP (например 127.0.0.1:9000)
- Убедитесь, что fastcgi_pass в nginx указывает на 127.0.0.1:9000.

4) Куда ставить конфиг nginx в 1.30
- Используйте /etc/nginx/conf.d/your-site.conf (обычно nginx.conf включает эту папку).
- Если хотите старые sites-available/sites-enabled — можно добавить include в /etc/nginx/nginx.conf, но это необязательно.

5) Примеры конфигураций

a) Минимальный сервер для простого PHP (php-fpm на unix-сокете /run/php/php8.2-fpm.sock):
server {
    listen 80;
    server_name example.com;
    root /var/www/example/public;            # для Laravel — public
    index index.php index.html;

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

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;   # замените на ваш путь или 127.0.0.1:9000
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_read_timeout 300;
    }

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

b) Пример для Laravel (тот же, но с оптимизациями):
server {
    listen 80;
    server_name example.com;
    root /var/www/example/public;
    index index.php;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    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; }

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

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

6) После правок
- Проверить конфиг nginx:
  sudo nginx -t
- Перезапустить сервисы:
  sudo systemctl restart php*-fpm
  sudo systemctl reload nginx

7) Диагностика, если всё ещё 502
- Посмотрите журнал ошибок nginx и php-fpm:
  sudo journalctl -u php*-fpm -e
  sudo tail -n 100 /var/log/nginx/error.log
- Проверьте, существует ли сокет:
  ls -l /run/php/*.sock
- Попробуйте временно переключить на TCP: в php-fpm pool (listen = 127.0.0.1:9000) и в nginx fastcgi_pass 127.0.0.1:9000. Если так заработало — проблема в сокете/прав ах/SELinux.
- Убедитесь, что DocumentRoot указывает на Laravel/public, а не на корень проекта.

8) Тест простого PHP
- Создайте /var/www/example/public/info.php с содержимым:
  <?php phpinfo();
- Зайдите на http://example.com/info.php — если выдаёт phpinfo, значит nginx<->php-fpm работает.

Если скажете ваш дистрибутив (Ubuntu/Debian/CentOS/Alma/ Rocky) и версию PHP (8.1/8.2 и т. п.), пошлю точную команду для поиска socket и готовый конфиг с правильными путями.
Дело не в версии, а в поставках. Кто-то поставляет nginx с sites-available, sites-enabled, а кто-то с conf.d. <br/> Формат конфигов не изменился, а все управляющие директории прописаны в основном конфиге nginx.conf
Спасибо, что напомнили - если хочешь испортить себе настроение  и прочувствовать ароматы - задай безобидный вопрос на тостере. <br/> Особенно тем, кто видит через экран, на чем и для чего я работаю. <br/> <br/> Но в нужную сторону вы меня навели и спустя полтора часа я нашел решение. <br/> Все дело было действительно в правах. Только не там искал. <br/> <br/> Вдруг кому когда пригодится - <a href="https://fastfox.pro/blog/tutorials/nginx-php-fpm-socket-permission/?ysclid=mo4lfy8ihi724205578" rel="nofollow">как исправить Permission denied между Nginx и PHP-...</a> <br/> <br/> Обязательно еще потренируюсь, чтобы не отвлекать глупыми вопросами
Похожие вопросы