
Estoy ejecutando php-cgi y NGINX. Se están ejecutando en una carpeta, sin embargo, su directorio raíz está a 2 directorios de distancia y 2 de entrada desde allí. Cuando la raíz era html (predeterminada), funcionaban perfectamente; sin embargo, ahora php informa el error "No se especificó ningún archivo de entrada". Intenté configurar el directorio para dar control total a todos los programas, ya tengo control total, intenté ver si php está buscando en un directorio diferente, intenté cambiar los directorios, codificar la variable php, etc. He seguido unos 5 tutoriales diferentes sobre cómo solucionar este problema, pero ninguno lo ha resuelto. No hay errores en la consola y mi fastcgi.conf no ha cambiado. Definitivamente, php y NGINX se están ejecutando y comunicando, sin embargo, php no puede obtener el archivo por algún motivo. Al acceder a cualquier archivo que no sea php, NGINX recupera con éxito el archivo y mi navegador lo muestra. He verificado, usando netstat, que lo único que escucha en el puerto 9100 es mi php-cgi. Y lo único que escucha en el puerto 8080 es NGINX. Tanto php como NGINX están configurados para comunicarse correctamente y php-cgi se ejecuta a través de RunHiddenConsole.exe que se encuentra en el directorio php.
Aquí está el árbol de directorios, en un formato similar a YAML:
EclipsePHP
- Code
- Blog
- Source (NGINX/php root Location/Website Source Files)
- NGINX
- 1.9.11 (NGINX Executable Location)
- php (php Executable Location)
Y mi nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
client_max_body_size 5G;
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
root ../../Code/Blog/Source;
client_max_body_size 5G;
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
index index.php;
try_files $uri $uri.html $uri/ @extensionless-php;
index index.html index.htm index.php;
client_max_body_size 5G;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
recursive_error_pages off;
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
client_max_body_size 5G;
try_files $uri =404;
include fastcgi.conf;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9100;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
location @extensionless-php {
rewrite ^(.*)$ $1.php last;
}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
¿Cuál podría ser la causa de este error y cómo puedo resolverlo para poder ver los archivos php correctamente en mi navegador? (Estoy usando Eclipse PHP para editar el código fuente y el error se produce con y sin ejecución de Eclipse).
Respuesta1
Como a php no le gustan los directorios relativos, mi solución fue usar lotes para establecer un directorio absoluto en cada inicio. Inserté lo siguiente en mi script de inicio por lotes antes de iniciar NGINX.
set TEXT_FILE=conf\phploc.conf
set REL_PATH=..\..\Code\Blog\Source
set ABS_PATH=
pushd %REL_PATH%
set ABS_PATH=%CD%
popd
echo fastcgi_param SCRIPT_FILENAME %ABS_PATH%$fastcgi_script_name; > %TEXT_FILE%
Luego, en el archivo de configuración de NGINX, inserté lo siguiente en el bloque de ubicación de php para cargar la configuración del directorio.
include phploc.conf;
Respuesta2
Usted define su raíz como una ruta relativa, que es relativa al nginx
directorio de configuración.
Esto luego se pasa a php-cgi
, a quien probablemente no le importe dónde nginx
guarda sus archivos. Entonces no se puede resolver ../../
.
Debes especificar una raíz absoluta.