NGINX PHP FastCGI problema com vários locais (alias)

1

Primeira vez postando e muito novo para tudo isto - foi aconselhado tentar aqui em cima de estouro de pilha e lesse alguns coisas diferentes unidas mas há pouco não posso entrar minha cabeça ao redor disto. Depois de muita tentativa e erro, e olhando meus blocos de localização, atualmente é assim - o PHP global foi removido e incluído nos meus blocos de localização.

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

www.mydomain.com - exibe o arquivo index.php de / var / www / html / test

www.mydomain.com/test - deve exibir o arquivo de index.php de / var / www / html / test2 , mas ele falha com o seguinte erro.

Meu log de erros do Nginx mostra o seguinte ao visitar:

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"

Eu tenho olhado vários pedaços aqui sobre diferentes parâmetros do SCRIPT_FILENAME fastcgi_param, mas não consigo fazer nenhum deles funcionar. Qualquer sugestão seria muito apreciada, já que passei horas tentando fazer com que isso funcionasse e consegui fazer algum progresso, mas fiquei impressionado com o que eu assumo que será a tarefa final em fazer esse trabalho.

Eu já removi o try_files do alias como me foi dito que não é legal (403 antes disso) e adicionei $ request_filename ao meu fastcgi_param bu que não parou este 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 eu tento aqui aconselhado

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, mas isso foi quase um recuo, resultando em um erro 404 nginx ao visitar / test / com as alterações sugeridas, fazendo com que parecesse assim, conforme o exemplo deles -

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

Estou feliz em trabalhar também (eu confio neles mais do que o meu) para tentar resolver isso se alguém tiver algum tipo de conhecimento que me ajudaria com isso.

    
por PBX 27.02.2018 / 02:10

1 resposta

0

O 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 o 404 veio dos arquivos para o primeiro local em / var / www / html / test2, mas com um local / teste que é prefixado para que o diretório seja / var / www / html / test2 on final do servidor da Web.

    
por 27.02.2018 / 13:36