nginx config com php e alias quebrados após a atualização

2

Eu configurei o acesso a um diretório local por meio de um alias nginx + suporte php: https://mydomain.de/wbg points to /var/www/wallabag . Tudo estava funcionando bem até que eu fiz uma atualização normal do apt-get & & apt-get upgrade no servidor (rodando no debian 8). Agora, quando eu abro o site eu só recebo "Nenhum arquivo de entrada especificado". Aqui está o que o nginx diz:

2016/02/20 13:07:14 [error] 4376#0: *1 FastCGI sent in stderr: "Unable to open primary script: /var/www/wallabag/index.php/wbg/index.php (No such file or directory)" while reading response header from upstream, client: 78.50.228.24, server: mydomain.de, request: "GET /wbg/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "mydomain.de"

Esta é a parte importante da minha configuração:

server {
    server_name mydomain.de;

    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    # ssl configuration
    # ...

    root /var/www/html;

    index index.php index.html index.htm index.nginx-debian.html;

    location / {
        # ...
    }

    location /wbg/ {
        alias /var/www/wallabag/;

        index index.php;

        location ~ ^.+?\.php(/.*)?$ {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_split_path_info ^(.+\.php)(/.*)$;
                set $path_info $fastcgi_path_info;
                fastcgi_param PATH_INFO $path_info;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $request_filename$fastcgi_script_name;
        }
    }
}

Como é possível que essa configuração seja interrompida após uma atualização? E como posso consertar isso?

(a versão nginx é 1.6.2-5 + deb8u1 após a atualização, php5-fpm: 5.6.17 + dfsg-0 + deb8u1)

    
por thomas.mc.work 20.02.2016 / 13:38

1 resposta

2

A resposta mais simples é que a mensagem de erro é consistente com sua configuração como você a tem agora - então não tenho idéia de como ela funcionava antes da atualização.

A linha fastcgi_param SCRIPT_FILENAME $request_filename$fastcgi_script_name está gerando um valor de /var/www/wallabag/index.php/wbg/index.php porque:

$request_filename    = /var/www/wallabag/index.php
$fastcgi_script_name = /wbg/index.php

Se você não usar informações de caminho (esse é o URI após o .php ), você poderá simplificar a parte PHP da configuração e usar apenas $request_filename . Algo como:

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

No entanto, para construir um SCRIPT_FILENAME de um URI com informações de caminho, você pode usar:

location ~ \.php(/|$) {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_split_path_info ^/wbg(.+\.php)(/.*)?$;
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Observe que fastcgi_split_path_info remove o prefixo /wbg do URI para construir o valor correto para SCRIPT_FILENAME.

    
por 20.02.2016 / 21:25