Nginx baixando arquivo PHP somente se .php estiver no URL


8

Sei que esta é uma pergunta popular, mas não encontrei ninguém com o mesmo problema. Eu posso servir arquivos PHP desde que a extensão .php não esteja no URL. Por exemplo:

Se eu for localhost, recebo meu arquivo index.php. Se eu for localhost/index.phpbaixar o arquivo. Aqui está a minha configuração:

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;
    }
}

Estou bastante confuso com esse problema e me pergunto se alguém tem experiência no assunto.


Você também pode postar o seu php.ini?
kraxor

Respostas:


4

Se isso estiver funcionando algumas vezes (para que você saiba que o PHP-FPM está funcionando), eu ficaria bem definido por ser um problema do nginx. Suspeito de algumas regras no seu bloco de localização do PHP. Eles podem estar quebrando em certos URLs, causando o despejo do nginx.

Você só precisa de 2 linhas para capturar índices de diretório:

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

Retire esse local, recarregue o nginx e veja o que acontece.

Se você precisar reescrever (URLs bonitas no Wordpress, etc), você deseja adicionar algo como isto

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

Mas faça isso apenas quando tiver URLs padrão funcionando.


2
Fiz as alterações e, a princípio, não funcionou. Depois, removi o cache do meu navegador e funcionou. Obrigado pelo seu tempo! :)
Mathew A

1

Tinha esse mesmo problema, no entanto, eu também precisava dessa linha

include fastcgi.conf;

Eu também tive

location ~* .+ {..}

e teve que ter certeza de que foi atrás da localização ~ \.php$ {..}


1
Hmm interessante include fastcgi.conf;é quase o mesmo que include fastcgi_params;inclui adicionalmente fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;alguns usuários que incluem, em include fastcgi_params;vez de .confincluir manualmente, na configuração de seus sites.
LiveWireBT
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.