Problema de vários locais (alias) do NGINX PHP FastCGI

Problema de vários locais (alias) do NGINX PHP FastCGI

Postagem pela primeira vez e muito nova em tudo isso - fui aconselhado a tentar aqui o overflow de pilha e li algumas coisas diferentes vinculadas, mas simplesmente não consigo entender isso. Depois de muitas tentativas e erros e observar meus blocos de localização atualmente estão assim - o PHP global foi removido e incluído em meus blocos de localização.

O primeiro funciona bem, o segundo depois de algumas alterações agora não mostra 403 Proibido ou 404 não encontrado, mas mostra uma string genérica 'Arquivo não encontrado'.

www.meudominio.com- servir arquivo index.php de/var/www/html/teste

www.meudominio.com/test- deve servir o arquivo de index.php de /var/www/html/test2mas falha com o seguinte erro.

Meu log de erros do Nginx mostra o seguinte durante a visita:

2018/02/26 19:13:47 [error] 25229#25229: *185968 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: X.X.X.X, server: domain.co.uk, request: "GET /test/ HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "domain.co.uk"

Estive analisando vários pedaços aqui sobre diferentes parâmetros fastcgi_param SCRIPT_FILENAME, mas não consigo fazer nenhum deles funcionar. Qualquer sugestão seria muito apreciada, pois passei horas tentando fazer isso funcionar e consegui fazer algum progresso, mas fiquei perplexo com o que presumo que será a tarefa final para fazer este trabalho.

Já removi try_files do alias, pois me disseram que isso não funciona bem (403 antes disso) e adicionei $request_filename ao meu fastcgi_param bu que não interrompeu esse erro.

location ~ ^((?!\/test).)*$ {
include /etc/nginx/mime.types;
    root /var/www/html/test;
    index index.php index.html index.htm;
    location ~ \.php$ {
        root /var/www/html/test;
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}



location ~ ^/test(.*)$ {
include /etc/nginx/mime.types;
    alias /var/www/html/test2/;
    index index.php index.html index.htm;
    location ~ \.php$ {
        alias /var/www/html/test2/;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename;
        include fastcgi_params;
    }
}

O usuário que recomendou que eu tente aqui aconselhou

Move the root /var/www/html/test; outside the first location block. nginx pitfalls
Replace alias with root in second block. according to nginx docs
remove the second alias in second block. it was redundant anyway
remove $request_filename; from fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name$request_filename; same error on serverfault

Eu fiz isso, no entanto, foi quase um passo atrás, resultando em um erro 404 nginx ao visitar /test/ com as alterações sugeridas, fazendo com que ficasse assim conforme o exemplo -

 server {
   root /var/www/html/test;
   location ~ ^((?!\/test).)*$ {
      include /etc/nginx/mime.types;
      index index.php index.html index.htm;
      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }

   location ~ ^/test(.*)$ {
      include /etc/nginx/mime.types;
      root /var/www/html/test2/;
      index index.php index.html index.htm;
      location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }
}

Fico feliz em trabalhar também (confio mais neles do que no meu) para tentar resolver isso, se alguém tiver algum tipo de conhecimento que possa me ajudar com isso.

Responder1

Cemal no Stackoverflow resolveu isso para mim!

server {
   root /var/www/html/test;

   location /test {
      include /etc/nginx/mime.types;
      root /var/www/html/test2/;
      index index.php index.html index.htm;
      location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }

   location / {
      include /etc/nginx/mime.types;
      index index.php index.html index.htm;
      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param HTTP_IF_NONE_MATCH $http_if_none_match;
        fastcgi_param HTTP_IF_MODIFIED_SINCE $http_if_modified_since;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }


}

O problema com 404 se resumia aos arquivos do primeiro local em /var/www/html/test2, mas com um local /test que é prefixado, então o diretório deve ser /var/www/html/test2 no final do servidor web .

informação relacionada