Назад | Перейти на главную страницу

(proxy_fcgi: error) AH01071: Получена ошибка «Невозможно открыть основной скрипт:» (Нет такого файла или каталога)

X-сообщение из StackOverflow

Я прочитал бесчисленное количество сообщений на форуме об этом, но ни один из ответов, похоже, не помог в моей ситуации. Вот выдержка из журнала:

[proxy_fcgi:error] [pid XXXX] [client redacted] AH01071: Got error 'Unable to open primary script: /home/user-account/public_html/www/index.php (No such file or directory)'

Я проверил вручную, что этот файл доступен для чтения через SSH; Кроме того, через браузер можно получить доступ к другим файлам, отличным от php.

Моя структура каталогов выглядит следующим образом:

/home/user-account
/home/user-account/apps
/home/user-account/apps/old
/home/user-account/apps/current
/home/user-account/public_html
/home/user-account/public_html/old > symlink to > /home/user-account/apps/old
/home/user-account/public_html/test > symlink to > /home/user-account/apps/current
/home/user-account/public_html/www > symlink to > /home/user-account/apps/current

У меня есть 2 поддомена на domain.com:

old.domain.com
test.domain.com

Поэтому из-за того, как cPanel / WHM / Apache записывает свои виртуальные хосты (с учетом директивы ServerAlias), результирующая структура домена выглядит так:

old.domain.com
www.old.domain.com (I ignore this)
test.domain.com
www.test.domain.com (I ignore this)
domain.com (.htaccess redirects to www.domain.com)
www.domain.com (This is the domain with the issue; also domain.com would be an issue if not for the redirect)

До сих пор я разрабатывал свой сайт на wordpress в реальном каталоге. /home/user-account/public_html/test. Сайт в идеальном рабочем состоянии. Тогда я решил пойти вживую. Я переместил настоящую папку в ее текущее местоположение (/home/user-account/apps/current) и символические ссылки /home/user-account/public_html/test к нему. Я перезапустил Apache и проверил test.domain.com сайт по-прежнему работал, как ожидалось (тестирование символической ссылки). Чувствуя уверенность в настройке символической ссылки, я удалил свою исходную символическую ссылку /home/user-account/public_html/www (указывая на мое старое приложение для рельсов на /home/user-account/apps/old) и создал новый, указывающий на /home/user-account/apps/current. Вот тогда и началась проблема.

httpd.conf:

Единственное заметное различие между тестовым поддоменом и основным доменом (с псевдонимом www) заключается в том, что автоматически сгенерированные директивы тестового поддомена указывают на истинное расположение папки с псевдонимом (DocumentRoot / Directory / ScriptAlias ​​все используют /home/user-account/public_html/test). Я считаю, что это произошло потому, что я использовал cPanel для создания поддомена, который должен был указывать на каталог внутри /home/user-account/public_html. Но все автоматически сгенерированные директивы основного домена указывают на /home/user-account/public_html вместо того /home/user-account/public_html/www.

тем не мение, apache 2.4 позволяет мне включать настраиваемые параметры конфигурации виртуального хоста, помещая мои файлы custom.conf в соответствующие каталоги. Так что для тестового поддомена они мне не нужны, но мне пришлось использовать их для основного домена; Я знаю, что они работают, потому что журнал ошибок (находится в верхней части этого сообщения) показывает, что он использует правильный DocumentRoot. Вот отрывок из std custom.conf, показывающий, что помимо установки DocumentRoot я также явно переопределяю другие автоматически сгенерированные директивы:

DocumentRoot /home/user-account/public_html/www
<IfModule mod_include.c>
  <Directory "/home/user-account/public_html/www">
    SSILegacyExprParser On
  </Directory>
</IfModule>
<IfModule alias_module>
  ScriptAlias /cgi-bin/ /home/user-account/public_html/www/cgi-bin/
</IfModule>
<IfModule ssl_module>
  <Directory "/home/user-account/public_html/www/cgi-bin">
    SSLOptions +StdEnvVars
  </Directory>
</IfModule>

Права доступа к файлам:

Я не изменил права доступа к файлам по сравнению с их исходными настройками и уже подтвердил их правильность. Очередной раз, test.domain.com работал как положено. Это только (www.?)domain.com это не так.

Другие «исправления», которые ничего не сделали:

Статистика сервера:

Что бы вы ни рассматривали, помните, что практически нет разницы между файлами в тестовом поддомене и в основном домене (включая .htaccess); они оба связаны с одним и тем же каталогом. Единственное различие, которое я вижу, заключается в том, что test - это зарегистрированный поддомен, и поэтому httpd.conf обрабатывает его немного иначе, чем основной домен. Однако я не могу просто добавить субдомен «www» через cPanel - это не позволит мне - возможно, потому, что он все равно является псевдонимом www.

Я копался, пытаясь исправить это, и мой общедоступный веб-сайт не работал более 24 часов, поэтому я был бы очень признателен за любую помощь, которую вы можете предоставить!

Дополнение:

Я не знаю, актуально ли это (похоже, это не повлияло на мое старое приложение rails), но в WHM> Manage SSL Hosts мой основной домен и субдомен www указывают на корень документа /home/user-account/public_html, тогда как мои поддомены указывают на правильные соответствующие каталоги.

Я также попытался настроить vhost в основном домене для использования тестового каталога (такого же, как тестовый субдомен), но это дает мне ту же ошибку. Я не думаю, что это проблема с разрешением / файлом.

Я также создал файл test.php в /public_html каталог, чтобы проверить прямой доступ. Он по-прежнему ошибался и регистрировался:

AH01071: Got error 'Unable to open primary script: /home/user-account/public_html/www/index.php (No such file or directory)', referer: https:// domain.com/test.php

И ответ заключается в том, что мне пришлось установить doc_root через конфигурацию PHP-FPM для данного домена. Зачем? Я не знаю - если кто-то может пролить свет на это, я бы предпочел не делать что-то через конфигурацию FPM и, если возможно, настраивать ее через Apache. Мне не нужно этого делать для поддоменов ...