(proxy_fcgi: error) AH01071: Obtuve el error 'No se puede abrir el script principal:' (No existe ese archivo o directorio)

Apr 22 2020

X-post de StackOverflow

He leído innumerables publicaciones en foros sobre esto, pero ninguna de las respuestas parece ayudar en mi situación. Aquí está el extracto del registro:

[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)'

He verificado manualmente que este archivo se puede leer a través de SSH; Además, se puede acceder a otros archivos que no son PHP a través del navegador.

Mi estructura de directorio es la siguiente:

/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

Tengo 2 subdominios en 'dominio.com':

old.domain.com
test.domain.com

Por lo tanto, debido a cómo cPanel / WHM / Apache escribe sus hosts virtuales (considerando la directiva ServerAlias), la estructura de dominio resultante es:

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)

Hasta ahora he estado desarrollando mi sitio web de wordpress bajo un directorio real /home/user-account/public_html/test. El sitio está en perfectas condiciones de funcionamiento. Entonces decidí irme a vivir. Moví la carpeta real a su ubicación actual ( /home/user-account/apps/current) y la vinculé simbólicamente /home/user-account/public_html/test. Reinicié Apache y verifiqué que el test.domain.comsitio todavía funcionaba como se esperaba (probando el enlace simbólico). Sintiéndome confiado en la configuración del enlace simbólico, eliminé mi enlace simbólico original de /home/user-account/public_html/www(apuntando a mi antigua aplicación de rieles en /home/user-account/apps/old) y creé uno nuevo apuntando a /home/user-account/apps/current. Aquí es cuando comenzó el problema.

httpd.conf:

La única diferencia apreciable entre el subdominio de prueba y el dominio principal (con www alias) es que las directivas autogeneradas del subdominio de prueba apuntan a la verdadera ubicación de la carpeta con alias (DocumentRoot / Directory / ScriptAlias ​​usan todos /home/user-account/public_html/test). Creo que esto se debió a que había usado cPanel para crear un subdominio que tenía que apuntar a un directorio dentro /home/user-account/public_html. Pero todas las directivas generadas automáticamente del dominio principal apuntan a en /home/user-account/public_htmllugar de /home/user-account/public_html/www.

Sin embargo , apache 2.4 me permite incluir opciones personalizadas de configuración de virtualhost colocando mis archivos custom.conf en los directorios apropiados. Entonces no necesito ninguno de ellos para el subdominio de prueba, pero tuve que usarlos para el dominio principal; Sé que están funcionando porque el registro de errores (que se encuentra en la parte superior de esta publicación) muestra que está usando el DocumentRoot adecuado. Aquí hay un extracto de std custom.conf para mostrar que además de configurar DocumentRoot, también anulo las otras directivas autogeneradas explícitamente:

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>

Permisos de archivo:

No he cambiado los permisos de archivo de su configuración original y ya he verificado que son correctos. Nuevamente, test.domain.comestaba funcionando como se esperaba. Es solo (www.?)domain.comque no lo es.

Otras 'correcciones' que no hicieron nada:

  • Reconstruir / reiniciar PHP-FPM (ineficaz)
  • SetHandler / ProxyOverride (SetHandler se crea automáticamente para mí mediante rebuildhttpdconf y no espero que sea el problema, ya que funciona para el subdominio de prueba; ProxyOverride no parece hacer nada)
  • Configure wordpress .htaccess (ya está en su lugar y coincide con lo que se muestra aquí. Nuevamente, el subdominio de prueba está funcionando y es un alias como www)

Estadísticas del servidor:

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

Independientemente de lo que considere, recuerde que prácticamente no hay diferencia entre los archivos del subdominio de prueba y el dominio principal (incluido .htaccess); ambos tienen un alias en el mismo directorio. La única diferencia que puedo ver es que la prueba es un subdominio registrado y, por lo tanto, httpd.conf lo maneja de manera ligeramente diferente que el dominio principal. Sin embargo, no puedo simplemente agregar un subdominio 'www' a través de cPanel, no me lo permitirá, probablemente porque tiene un alias www de todos modos.

He estado tratando de solucionar este problema y mi sitio web público ha estado inactivo durante más de 24 horas, por lo que agradecería mucho cualquier ayuda que pueda brindar.

Apéndice:

No sé si es relevante (no pareció afectar mi antigua aplicación de rieles), pero en WHM> Administrar hosts SSL, mi dominio principal y el subdominio www apuntan a la raíz del documento /home/user-account/public_html, mientras que mis subdominios apuntan a la raíz correcta. directorios respectivos.

También intenté configurar el vhost en el dominio principal para usar el directorio de prueba (igual que el subdominio de prueba) pero me está dando el mismo error. No creo que sea un problema de permiso / archivo.

También creé un archivo test.php en el /public_htmldirectorio para probar un acceso directo. Todavía se equivocó y se registró:

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

Respuestas

JakeTheSnake Apr 22 2020 at 22:41

Y la respuesta es que tuve que configurar el doc_root a través de la configuración PHP-FPM para el dominio dado. ¿Por qué? No sé, si alguien puede arrojar algo de luz sobre esto, preferiría no tener que hacer cosas a través de la configuración de FPM y configurarlo a través de Apache si es posible. No tengo que hacer esto para los subdominios ...