Problema de múltiples ubicaciones (alias) de NGINX PHP FastCGI

Problema de múltiples ubicaciones (alias) de NGINX PHP FastCGI

Es la primera vez que publico y soy muy nuevo en todo esto: me recomendaron que probara aquí con el desbordamiento de pila y leí algunas cosas diferentes vinculadas, pero no puedo entenderlo. Después de muchas pruebas y errores y de observar, mis bloques de ubicación actualmente se ven así: PHP global se eliminó y se incluyó en mis bloques de ubicación.

El primero funciona bien, el segundo, después de algunos cambios, ahora no muestra un 403 Prohibido o 404 no encontrado, pero muestra una cadena genérica "Archivo no encontrado".

www.midominio.com- servir el archivo index.php desde/var/www/html/prueba

www.midominio.com/prueba- debería servir el archivo desde index.php desde /var/www/html/test2pero falla con el siguiente error.

Mi registro de errores de Nginx muestra lo siguiente cuando visito:

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"

He estado mirando varios fragmentos aquí sobre diferentes parámetros fastcgi_param SCRIPT_FILENAME pero no puedo hacer que ninguno de ellos funcione. Cualquier sugerencia sería realmente apreciada, ya que pasé horas tratando de hacer que esto funcione y logré hacer algunos progresos, pero estoy perplejo por lo que supongo será la tarea final para que esto funcione.

Ya eliminé try_files del alias porque me dijeron que no funciona bien (403 antes de eso) y agregué $request_filename a mi fastcgi_param bu que no ha detenido este error.

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

El usuario que recomendó que probara aquí me aconsejó.

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

Hice esto, sin embargo, fue casi un paso atrás, lo que resultó en un error 404 nginx al visitar /test/ con los cambios sugeridos que lo hicieron lucir así según su ejemplo:

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

Estoy feliz de trabajar con cualquiera de los dos (confío en los de ellos más que en los míos) para intentar resolver esto si alguien tiene algún tipo de conocimiento que pueda ayudarme con esto.

Respuesta1

¡Cemal en Stackoverflow me ha resuelto esto!

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


}

El problema con los 404 se redujo a que los archivos de la primera ubicación estaban en /var/www/html/test2 pero con una ubicación /test que tiene el prefijo, por lo que el directorio debería ser /var/www/html/test2 en el extremo del servidor web. .

información relacionada