Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
Apache Error: AH01071: Got error 'Primary script unknown' (FastCGI script execution failed) Linux / DevOps

Apache Error AH01071: Primary script unknown — Решение для PHP-FPM

Обновлено: 18.08.2026  ·  Официальная база знаний

При переходе на страницы сайта браузер возвращает белый экран с текстовым сообщением File not found. или код 404 Not Found / 500 Internal Server Error. В error.log Apache регистрируется ошибка выполнения скрипта: [proxy_fcgi:error] [pid 1234:tid 5678] [client ...] AH01071: Got error 'Primary script unknown'.

КомпонентПереданный параметрПричина сбоя
Apache DocumentRoot/var/www/site/publicApache передает путь в сокет PHP-FPM
FastCGI SCRIPT_FILENAME/var/www/site/index.phpPHP-FPM не находит файл по переданному пути
Права файловой системыПользователь www-data / apacheУ процесса PHP-FPM нет прав на чтение файла скрипта
  • Статические ресурсы (CSS, JS, PNG) загружаются веб-сервером корректно.
  • Любой PHP-скрипт не исполняется и возвращает мгновенный отказ «Primary script unknown».
  1. Проверьте директиву DocumentRoot в конфигурационном файле виртуального хоста. Путь должен точно указывать на директорию с вашим index.php (например, public/ для Laravel/Symfony):
    <VirtualHost *:80>
        ServerName example.com
        DocumentRoot /var/www/example.com/public
    
        <Directory /var/www/example.com/public>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>
    
        # Корректная связка с PHP-FPM через SetHandler:
        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
        </FilesMatch>
    </VirtualHost>
  2. Если используется конструкция ProxyPassMatch, замените ее на рекомендуемый SetHandler или исправьте регулярное выражение путей:
    # УСТАРЕВШИЙ И ОШИБОЧНЫЙ ВАРИАНТ (ЧАСТО ЛОМАЕТ ПУТИ):
    # ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php8.2-fpm.sock|fcgi://localhost/var/www/html/$1
    
    # СОВРЕМЕННЫЙ ПРАВИЛЬНЫЙ ВАРИАНТ:
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
  3. Проверьте физическое существование файла на диске и права доступа:
    ls -la /var/www/example.com/public/index.php
    sudo chown -R www-data:www-data /var/www/example.com/public
    sudo chmod -R 755 /var/www/example.com/public
  4. Для Docker окружений: Убедитесь, что директория с исходным кодом примонтирована в абсолютно одинаковый путь как внутри контейнера Apache, так и внутри контейнера PHP-FPM.
  5. Перезапустите стек: sudo systemctl reload apache2 && sudo systemctl restart php8.2-fpm.
Apache 2.4 Best Practice: Никогда не используйте директиву ProxyPassMatch ^/(.*\.php)$ для передачи запросов в PHP-FPM. Она уязвима к ошибкам трансляции URL в пути файловой системы и создает известные проблемы безопасности. Используйте директиву SetHandler "proxy:fcgi://..." внутри блока <FilesMatch>.
Практический опыт инженера: В 95% случаев в современных PHP-фреймворках (Laravel, Symfony) ошибка вызвана тем, что `DocumentRoot` указывает на корень репозитория `/var/www/app`, а не на публичную папку `/var/www/app/public`.

Частые вопросы (FAQ)

Кто именно генерирует текст 'Primary script unknown'?

Это сообщение генерирует непосредственно движок PHP-FPM, когда полученный через FastCGI параметр SCRIPT_FILENAME указывает на путь, который не существует в файловой системе PHP-FPM.

Почему статика работает, а PHP нет?

Apache отдает статические файлы напрямую со своего диска силами модуля core, а обработку PHP делегирует отдельному демону PHP-FPM, передавая ему текстовый путь к файлу.

Может ли директива open_basedir вызывать ошибку AH01071?

Да, если запрошенный файл находится за пределами директорий, разрешенных директивой open_basedir в php.ini, PHP-FPM заблокирует его выполнение с ошибкой Primary script unknown.

Как проверить, какой именно путь Apache передает в PHP-FPM?

Включите LogLevel proxy_fcgi:trace7 в блоке VirtualHost, и Apache запишет все передаваемые FastCGI параметры в error.log.