Nginx descarga archivos PHP solo si .php está en la URL

8

Sé que esta es una pregunta popular, pero no he encontrado a nadie con mi problema similar. Puedo servir archivos PHP siempre que la extensión .php no esté en la url. Por ejemplo:

Si voy a localhostme sirve mi archivo index.php. Si voy a localhost/index.phpdescargar el archivo. Aquí está mi configuración:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #   proxy_pass http://127.0.0.1:8080;    
    #}

    error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny all;
    }
}

Estoy bastante confundido con este tema y me pregunto si alguien tiene experiencia en el asunto.

Mateo A
fuente
¿También puedes publicar tu php.ini?
kraxor

Respuestas:

4

Si esto a veces funciona (para que sepa que PHP-FPM está funcionando), estaría bastante seguro de que esto es un problema de nginx. Sospecho de un par de reglas en su bloque de ubicación PHP. Ellos podrían estar infringiendo en ciertas direcciones URL causando nginx a volcar.

Solo necesita 2 líneas para capturar índices de directorio:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
}

Regrese esa ubicación a eso, vuelva a cargar nginx y vea qué sucede.

Si necesita reescribir (URL bonitas en Wordpress, etc.) desea agregar algo como esto

location / {
        try_files $uri $uri/ /index.php?$args;
}

Pero solo haga eso una vez que tenga las URL estándar funcionando.

Oli
fuente
2
Hice los cambios y al principio no funcionó. Luego eliminé el caché en mi navegador y funcionó. ¡Gracias por tu tiempo! :)
Mathew A
1

Sin embargo, tuve el mismo problema, también necesitaba esta línea

include fastcgi.conf;

también tenía

location ~* .+ {..}

y tuve que asegurarme de que fuera después de la ubicación ~ \.php$ {..}

sqram
fuente
1
Hmm interesante include fastcgi.conf;es casi lo mismo include fastcgi_params;pero también incluye fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;algunos usuarios que incluyen en include fastcgi_params;lugar de .confincluir manualmente en la configuración de sus sitios.
LiveWireBT