(proxy_fcgi:error)AH01071:エラーが発生しました 'プライマリスクリプトを開くことができません:'(そのようなファイルまたはディレクトリはありません)

Apr 22 2020

StackOverflowからのXポスト

私はこれについて無数のフォーラム投稿を読みましたが、答えのどれも私の状況を助けていないようです。ログの抜粋は次のとおりです。

[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

'domain.com'に2つのサブドメインがあります:

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)

今まで私は実際のディレクトリの下で私のワードプレスのウェブサイトを開発してきました/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(の古いRailsアプリを指す)の元のシンボリックリンクを削除し、を指す/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ではないのはそれだけです。

何もしなかった他の「修正」:

  • PHP-FPMの再構築/再起動(無効)
  • SetHandler / ProxyOverride(SetHandlerはrebuildhttpdconfによって自動的に作成されますが、テストサブドメインで機能しているため、問題になるとは思われません。ProxyOverrideは何もしないようです)
  • wordpress .htaccessを設定します(すでに配置されており、ここに表示されているものと一致します。ここでも、テストサブドメインが機能しており、wwwと同じようにエイリアスです)

サーバー統計:

  • EasyApache 4 with
    • Apache 2.4.43
      • mod_proxy_fcgi
    • PHP 7.3
      • php73-php-fpm

何を考えても、テストサブドメインとメインドメイン(.htaccessを含む)のファイルには実質的に違いがないことを忘れないでください。それらは両方とも同じディレクトリにエイリアスされています。私が見ることができる唯一の違いは、テストが登録されたサブドメインであるため、httpd.confがメインドメインとは少し異なる方法で処理することです。ただし、cPanelを介して「www」サブドメインを追加することはできません。おそらくwwwをエイリアスしているため、追加できません。

私はこれを修正しようと奮闘してきましたが、私の公開Webサイトは24時間以上ダウンしているので、ご協力いただければ幸いです。

補遺:

関連性があるかどうかはわかりませんが(古いrailsアプリには影響しなかったようです)、[WHM]> [SSLホストの管理]で、メインドメインとwwwサブドメインはのドキュメントルートを/home/user-account/public_html指しますが、サブドメインは正しいを指しますそれぞれのディレクトリ。

また、メインドメインの仮想ホストをテストディレクトリ(テストサブドメインと同じ)を使用するように設定しようとしましたが、同じエラーが発生します。パーミッション/ファイルの問題ではないと思います。

また/public_html、直接アクセスをテストするために、ディレクトリにtest.phpファイルを作成しました。それでもエラーが発生してログに記録されました。

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

回答

JakeTheSnake Apr 22 2020 at 22:41

そしてその答えは、特定のドメインのPHP-FPM構成を介してdoc_rootを設定する必要があったということです。どうして?わかりません-誰かがこれに光を当てることができれば、FPM構成を介して何かを行う必要はなく、可能であればApacheを介して設定する必要はありません。サブドメインに対してこれを行う必要はありません...