La primera vez que uso Nginx, pero estoy más que familiarizado con Apache y Linux. Estoy usando un proyecto existente y cuando intento ver index.php obtengo un archivo 404 no encontrado.
Aquí está la entrada de access.log:
2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.ordercloud.lh"
Y aquí está el archivo de sitios disponibles:
server {
set $host_path "/home/willem/git/console/www";
access_log /www/logs/console-access.log main;
server_name console.ordercloud;
root $host_path/htdocs;
set $yii_bootstrap "index.php";
charset utf-8;
location / {
index index.html $yii_bootstrap;
try_files $uri $uri/ /$yii_bootstrap?$args;
}
location ~ ^/(protected|framework|themes/\w+/views) {
deny all;
}
#avoid processing of calls to unexisting static files by yii
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
#let yii catch the calls to unexising PHP files
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
#PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
}
location ~ /\.ht {
deny all;
}
}
Mi / home / willem / git / console es propiedad de www-data: www-data (mi usuario web ejecuta php, etc.) y le he otorgado 777 permisos por frustración ...
Mi mejor conjetura es que algo está mal con la configuración, pero no puedo resolverlo ...
ACTUALIZACIÓN
Así que lo cambié/var/www/
y usé una configuración mucho más básica:
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
root /var/www/;
index index.html index.htm;
# Make site accessible from http://localhost/
server_name console.ordercloud;
location / {
root /var/www/console/frontend/www/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www;
include fastcgi_params;
}
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
try_files $uri =404;
}
location /doc/ {
alias /usr/share/doc/;
autoindex on;
allow 127.0.0.1;
deny all;
}
}
Además, si llamo localhost/console/frontend/www/index.php
, obtengo un 500 PHP, lo que significa que está sirviendo allí. Simplemente no está sirviendo fuera de la consola.
Respuestas:
El mensaje de error "script primario desconocido" casi siempre está relacionado con un conjunto incorrecto
SCRIPT_FILENAME
en lafastcgi_param
directiva nginx (o permisos incorrectos, vea otras respuestas).Estás utilizando un
if
en la configuración que publicaste primero. Bueno, ya debería saberse que si es malo y que a menudo produce problemas.Establecer la
root
directiva dentro de un bloque de ubicación es una mala práctica, por supuesto, funciona.Podría intentar algo como lo siguiente:
Tenga en cuenta que la configuración anterior no se ha probado. Debe ejecutar
nginx -t
antes de aplicarlo para verificar si nginx puede detectar problemas de inmediato.fuente
root
ubicación interna?http
sección de los siguientes:log_format scripts '$document_root$fastcgi_script_name > $request';
(o lo que usted está alimentando a SCRIPT_FILENAME), y para suserver
:access_log /var/log/nginx/scripts.log scripts
.No siempre es que
SCRIPT_FILENAME
está mal.También puede ser que PHP se esté ejecutando como el usuario / grupo incorrecto .
Este ejemplo es específico para Mac OS X , que en mi experiencia es el más problemático de configurar (Debian es fácil en comparación): acabo de actualizar de PHP 5.6 a 7.0, usando homebrew y los excelentes paquetes de josegonzalez.
El problema fue que se creó una nueva copia de los archivos de configuración.
El archivo de configuración principal es
/usr/local/etc/php/7.0/php-fpm.conf
, pero tenga en cuenta la sección Definiciones de grupo al final, donde incluye un subdirectorio completo.include=/usr/local/etc/php/7.0/php-fpm.d/*.conf
En
php-fpm.d
hay unwww.conf
archivo. Por defecto esto tiene:En OS X, es posible que deba cambiar esto a:
(debería encontrar que esto coincide con uno
ls -lh
de su document_root)Desafortunadamente, sin este cambio, aún verá esto en su registro de errores de Nginx, incluso si está buscando el archivo en el lugar correcto .
Verifique lo que se está ejecutando actualmente como:
o más limpiamente:
Cómo verificar si el nombre del archivo de script es correcto:
(robado de igorsantos07 en la otra respuesta)
Añadir al
http
bloque de main/usr/local/etc/nginx/nginx.conf
:(donde el primer bit debe ser lo que esté usando actualmente, para que pueda ver si es correcto).
Y para usar el registro que acaba de definir, en el
server
bloque de su sitio :Si es correcto, solicitar example.com/phpinfo.php producirá algo como esto:
¿Puedes simplificar tu configuración existente?
¿Está utilizando un
location ~ \.php {
bloque que copió / pegó de algún lugar fuera de Internet? La mayoría de los paquetes le permiten hacerlo de manera más rápida y limpia. por ejemplo, en OS X ahora solo necesitas esto:Se encuentran cosas como fastcgi_split_path_info, try_files y fastcgi_index (por defecto index.php)
/usr/local/etc/nginx/snippets/fastcgi-php.conf
.Eso a su vez incluye
/usr/local/etc/nginx/fastcgi.conf
cuál es una lista defastcgi_param
configuraciones, incluido el crucial SCRIPT_FILENAME.Nunca duplique
root
en el bloque de ubicación PHP.fuente
/etc/php/7.0/php-fpm.d/www.conf
archivo. Saludos, amigo. :) Muchas personas más pueden comenzar a ver este problema también a medida que la popularidad vaga continúa creciendo./usr/local/etc/nginx/snippets/fastcgi-php.conf
de mi mac ... pero sí encontré/usr/local/etc/nginx/fastcgi.conf
Ok, entonces 3 cosas que encontré después de un día de lucha
Espero que esto le ahorre a alguien algunos problemas!
fuente
Tuve el mismo problema con un nuevo nginx (v1.8). Las versiones más nuevas recomiendan usar en
snippets/fastcgi-php.conf;
lugar defastcgi.conf
. Entonces, si copia / pegainclude fastcgi.conf
desde un tutorial, puede terminar con elPrimary script unknown
error en el registro.fuente
"El script primario desconocido" es causado por el contexto de seguridad de SELinux.
el cliente recibe la respuesta
nginx error.log tiene el siguiente mensaje de error
así que simplemente cambie el tipo de contexto de seguridad de la carpeta raíz web a httpd_sys_content_t
hay 3 usuarios para la configuración nginx / php-fpm
/etc/nginx/nginx.conf
/etc/nginx/conf.d/www.conf
/etc/php-fpm.d/www.conf
user-1 y user-2 no son necesarios para ser lo mismo.
para el socket de Unix, el usuario-1 debe ser el mismo que el usuario-3, ya que nginx fastcgi_pass debe tener permiso de lectura / escritura en el socket de Unix.
de lo contrario, nginx obtendrá 502 Bad Gateway y nginx error.log tiene el siguiente mensaje de error
y el usuario / grupo de la carpeta raíz web (/ var / www / show) no es necesario que sea el mismo que cualquiera de estos 3 usuarios.
fuente
También tuve este problema y lo resolví intercambiando las líneas
include fastcgi_params
yfastcgi_param SCRIPT_FILENAME ...
.De hecho, nginx establece el último valor de cada parámetro FastCGI, por lo que debe colocar su valor después del valor predeterminado incluido en fastcgi_params.
fuente
Resolví este problema cerrando SELINUX en el sistema CentOS7.3
pasos:
setenforce 0
vim /etc/selinux/config set SELINUX to disabled
fuente
Encontré su pregunta buscando el mismo mensaje de error pero usando apache + php-fpm (sin nginx). Para mí, el problema era una barra oblicua en el lugar equivocado: muchas sugerencias de configuración incluyen una línea del formulario:
Al colocar la última barra después del número de puerto de esta manera:
El problema desapareció para mí. Quizás puedas hacer algo similar
fuente
fuente
Cloné un sitio remoto, y el wp-config.php ya existente tenía la información de la base de datos del servidor remoto.
Resolví este problema configurando mi configuración local de WordPress, con la información de mi base de datos local.
fuente
Hice todo desde arriba, perdí 2 horas golpeándome la cabeza y el problema persistió. Finalmente hice:
Y viola funcionó!
Por cierto, estaba configurando un nuevo proyecto de Symfony 3.4 con nginx conf desde el enlace: https://symfony.com/doc/3.4/setup/web_server_configuration.html
Esa fue la quinta vez que comencé un nuevo proyecto de Symfony y no podía creer que este "Script primario desconocido" estuviera sucediendo.
fuente
Verifique los permisos para su archivo de calcetines php-fpm, de alguna manera no fue accesible:
chmod 755 /usr/local/var/run/php-fpm.sock
luego intente reiniciar nginx.
fuente
Este mensaje extraño me ha atrapado durante mucho tiempo. No estoy seguro de la causa porque todo funcionó por un tiempo y de repente dejó de funcionar.
Estaba acortando las URL de wiki según lo prescrito por MediaWiki, con Bitnami / Nginx en Lightsail.
Busqué y leí muchas publicaciones, esta parece resumir todos los escenarios posibles, y los probé todos:
root
al servidor, no funcionóAsí que tenía que probar el último recurso, a partir de PHP carpeta raíz estaba funcionando y subcarpetas no lo fuera, la única diferencia importante entre ellos aparte
root
es la carpeta raíz utilizada$request_filename
y de la subcarpeta lugares utilizados$document_root
y$fastcgi_script_name
, por lo que cambió la configuración de ubicación subcarpeta para que coincidan con los de la carpeta raíz.Luego funcionó ... Todavía no estoy seguro de por qué funcionó. Porque cuando reviso el registro de acceso php-fpm veo el mismo URI, uno era 404 y el otro 200.
La única diferencia estaba en la configuración. Como producen la misma salida, no sé por qué el resultado fue diferente.
De todos modos, decidí publicar mis 2 centavos aquí, espero que esto ayude.
PD: Realmente espero que PHP proporcione mejores mensajes de error y un modo detallado, porque esto es realmente frustrante al no poder aislar el problema y no hay forma de ver información detallada de salida y depuración.
fuente
Intente agregar la directiva raíz dentro de su ubicación php.
fuente
root
directiva debe establecerse porserver
base y no debe usarse dentro de ningúnlocation
bloque (a menos que sea un profesional y quiera sortear algunos errores nginx muy especiales en su configuración).root
directiva dentro de unlocation
bloque.root
directivas dentro de múltipleslocation
bloques están claramente debajo del encabezado MALO.