Problem mit mehreren Standorten (Alias) bei NGINX PHP FastCGI

Problem mit mehreren Standorten (Alias) bei NGINX PHP FastCGI

Dies ist mein erster Beitrag und ich bin noch ganz neu in diesem Bereich – mir wurde geraten, es hier über Stack Overflow zu versuchen, und ich habe ein paar verschiedene verlinkte Dinge gelesen, aber ich komme einfach nicht dahinter. Nach viel Herumprobieren und Suchen sehen meine Standortblöcke derzeit so aus – globales PHP wurde entfernt und in meine Standortblöcke aufgenommen.

Das erste funktioniert einwandfrei, das Zweite zeigt nach einigen Änderungen jetzt keine 403-Meldung „Forbidden“ oder 404 „Nicht gefunden“ an, sondern die allgemeine Zeichenfolge „Datei nicht gefunden“.

www.meinedomain.com- Datei index.php bereitstellen von/var/www/html/test

www.meinedomain.com/test- sollte Datei von index.php bereitstellen von /var/www/html/test2aber es schlägt mit dem folgenden Fehler fehl.

Mein Nginx-Fehlerprotokoll zeigt beim Besuch Folgendes an:

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"

Ich habe mir hier verschiedene Kleinigkeiten zu verschiedenen fastcgi_param SCRIPT_FILENAME-Parametern angesehen, aber ich bekomme keinen davon zum Laufen. Ich wäre für jeden Vorschlag sehr dankbar, da ich Stunden damit verbracht habe, dies zum Laufen zu bringen, und einige Fortschritte erzielt habe, aber bei dem, was vermutlich die letzte Aufgabe sein wird, um dies zum Laufen zu bringen, ratlos bin.

Ich habe bereits try_files aus dem Alias ​​entfernt, da mir gesagt wurde, dass das nicht gut funktioniert (vorher 403-Fehler) und $request_filename zu meinem fastcgi_param hinzugefügt, aber das hat diesen Fehler nicht gestoppt.

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

Der Benutzer, der mir empfohlen hat, es hier zu versuchen, hat

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

Ich habe dies getan, aber das war fast ein Rückschritt, der zu einem 404-Nginx-Fehler beim Besuch von /test/ führte, mit den von ihnen vorgeschlagenen Änderungen, sodass es gemäß ihrem Beispiel so aussah -

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

Ich bin gern bereit, mit beiden zusammenzuarbeiten (ich vertraue ihren mehr als meinen eigenen), um zu versuchen, die Sache zu klären, wenn jemand über Kenntnisse verfügt, die mir dabei helfen könnten.

Antwort1

Cemal von Stackoverflow hat das für mich gelöst!

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


}

Das Problem mit 404-Fehlern war darauf zurückzuführen, dass sich die Dateien für den ersten Speicherort in /var/www/html/test2 befanden, jedoch ein Speicherort /test mit einem Präfix versehen war, sodass das Verzeichnis auf der Webserverseite /var/www/html/test2 sein sollte.

verwandte Informationen