(proxy_fcgi:error)AH01071:出现错误“无法打开主脚本:”(没有此文件或目录)

(proxy_fcgi:error)AH01071:出现错误“无法打开主脚本:”(没有此文件或目录)

X-post来自 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

我在'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)

到目前为止,我一直在真实目录 下开发我的 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(指向 的旧 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情况并非如此。

其他没有起到任何作用的“修复”:

服务器统计:

  • EasyApache 4 具有
    • Apache 2.4.43
      • 修改代理服务器
    • PHP 7.3
      • php73-php-fpm

无论您考虑什么,请记住,测试子域和主域(包括 .htaccess)中的文件几乎没有区别;它们都别名为同一个目录。我能看到的唯一区别是 test 是一个注册的子域,因此 httpd.conf 处理它的方式与主域略有不同。但是我不能通过 cPanel 添加“www”子域 - 它不允许我这样做 - 可能是因为它无论如何都会别名为 www。

我一直在努力尝试解决这个问题,我的公共网站已经宕机超过 24 个小时了,因此我将非常感谢您提供的任何帮助!

附录:

我不知道它是否相关(它似乎没有影响我的旧 rails 应用程序),但在 WHM > 管理 SSL 主机下,我的主域和 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

答案1

答案是我必须通过给定域的 PHP-FPM 配置设置 doc_root。为什么?我不知道 - 如果有人可以解释一下,我宁愿不必通过 FPM 配置来做事情,而是尽可能通过 Apache 来设置它。我不需要为子域执行此操作...

相关内容