Nginx servindo .PHP como um download somente quando o .php é adicionado com argumentos

1

Aqui está minha configuração atual do nginx:

server {
server_name mydomain.example;
access_log /srv/www/mydomain.example/logs/access.log;
error_log /srv/www/mydomain.example/logs/error.log;
root /srv/www/mydomain.example/public_html;
error_page 404 /404;

location / {
    if ($request_uri ~ ^(.*)\.(php|html)$) { return 302 $1$is_args$args; }
    try_files $uri $uri/index.html $uri/index.htm @php;
    index index.html index.htm index.php;
}

location @php {
    include /etc/nginx/fastcgi_params;
    fastcgi_pass  unix:/var/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    try_files $uri.php $uri/index.php =404;
}

location /support {
    rewrite ^(.*)\.php$ $1 break;
    try_files $uri $uri/index.html $uri/index.htm @php;
}

location /blog {
    rewrite ^(.*)\.php$ $1 break;
    try_files $uri $uri/index.html $uri/index.htm @php;
}

}

Então, basicamente, eu tenho um enorme problema de segurança que precisa ser corrigido o mais cedo possível. Quando eu vou para "mydomain.example / filename? Arg = 7887" tudo funciona bem. Mas quando um cliente tenta ir para "mydomain.example / filename.php? Arg = 7887" o servidor decide servir o arquivo como um download. Eu preciso dele para despir .php e reescrevê-lo para "mydomain.example / filename? Arg = 7887". Parece que só acontece quando há argumentos depois do .php, caso contrário ele tira o .php e funciona bem.

    
por Miguel Renaud-Nolte 07.02.2016 / 16:38

1 resposta

1

Isso se deve à try_files loucura e outras abordagens questionáveis. Remova todos os seus exercícios e torne-o canônico:

location / { index index.html; if (!-e $request_filename) { rewrite ^/(.*)$ /index.php; } }

location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_pass 127.0.0.1:9000; fastcgi_intercept_errors on; fastcgi_cache default; break; }

    
por 07.02.2016 / 16:49