Bem, você tem vários problemas, em primeiro lugar você está seguindo um tutorial de merda que está severamente desatualizado. if (!-f
geralmente não é recomendado com try_files oferecido como um substituto melhor.
Em segundo lugar, você tem diretivas em localização / contexto, que devem estar no contexto do servidor, para que você possa evitar duplicação de caminho na variável SCRIPT_FILENAME.
Em segundo lugar, você usa o sinalizador de quebra na sua reescrita. Isso significa que ele não deve reavaliar a correspondência de local. Isso faz com que a solicitação nunca saia do local / bloco e seja tratada como uma solicitação de arquivo estático.
Em terceiro lugar. Dê uma olhada no seu location ~ \.php$ {
O Nginx combina locais com o URI e você está dizendo especificamente ao Nginx para manipular apenas URIs que terminam em .php, mas se você reescrever para index.php / test /, ele não será acionado.
Por fim. Você está usando PATH_INFO enquanto deveria estar usando REQUEST_URI. A diferença é que para fazer o trabalho PATH_INFO você tem que dizer ao Nginx para passar qualquer requisição com .php para o PHP, e o PHP precisa então encontrar o arquivo correto.
Isso significa que você permite que solicitações como example.org/uploads/image.jpg/index.php sejam enviadas para o PHP e você também permite que o PHP execute o arquivo /uploads/image.jpg. Se um usuário mal-intencionado carregou esse arquivo com o PHP, ele agora tem execução arbitrária de código no seu servidor. Esta é uma exploração muito real a que eu pessoalmente tenho visto pessoas serem vulneráveis.
Por favor, pare de usar tutoriais aleatoriamente no Google, porque 90% deles são lixo, ao invés disso, leia o wiki . Pode ser um incômodo ter que realmente aprender sobre o servidor web que você está usando, mas a alternativa é ter seu servidor comprometido.