2016-11-25 7 views
0

Mit einigen (oder sehr viel) Versuch und Irrtum konnte ich meine Kopie ändern und eingefügt nginx fastcgi php-Konfiguration von vor Jahren, um meine php-Anwendung in einem Unterordner ausführen zu können.nginx übergibt fastcgi query string

Aber der letzte letzte Schritt, den ich nicht lösen kann, ist, wie nginx die Abfragezeichenfolge an php übergeben kann, um auf die GET-Parameter zugreifen zu können. Dies ist meine Konfiguration meist perfekt mit nur die Konfigurationsparameter fehlt:

server { 
    listen  80; 
    server_name project.dev; 

    location /app/ { 
     alias /path/to/my/application/; 
     index index.php; 
     try_files $uri $uri/ /app/index.php; 

     location ~ \.php$ { 
      include fastcgi_params; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_param SCRIPT_FILENAME $document_root/index.php; 
     } 
    } 

    location/{ 
     # configuration for static website 
    } 
} 

ich gelesen, dass es verschiedene Optionen, die Sie try_files passieren müssen Anforderungsparameter zu erhalten:

  • try_files $uri $uri/ /app/index.php$is_args$query_string;
  • try_files $uri $uri/ /app/index.php$is_args$args;
  • try_files $uri $uri/ /app/index.php?$query_string;

Leider ist es zu einem dieser Ergebnisse in meinem PHP-Skript zu ändern nicht mehr gefunden, weil nginx die Anforderung an das Dokumentenstamm setzt:

2016/11/25 11:54:48 [error] 45809#0: *1169 open() "/usr/local/Cellar/nginx-full/1.10.2/htmlindex.php" failed (2: No such file or directory), client: 127.0.0.1, server: project.dev, request: "GET /app/myurl?test=works HTTP/2.0", host: "project.dev", referrer: "http://project.dev/app/myurl?test=works" 

einen absoluten Pfad für fastcgi_param SCRIPT_FILENAME Bereitstellung nicht funktioniert die gleichen Fehler Producting. Selbst das Setzen einer root Konfiguration auf der Ebene server funktioniert nicht korrekt, da der Trennstrich für den Pfad und die index.php immer weggelassen wird. Aber (wenn möglich) würde ich bevorzugen, ohne ein Root-Verzeichnis auf der Server-Ebene zu setzen, weil dieses Projekt aus vielen verschiedenen Ordnern und Anwendungen auf dem Dateisystem besteht, die kein gemeinsames Verzeichnis teilen.

+0

Was versuchen Sie zu erreichen? Welche Dateien haben Sie unter '/ path/to/my/application /'? –

+0

Meine vollständige Bewerbung ist unter '/ Pfad/zu/meinem/Anwendung /' mit all ihren Assets gespeichert und es ist php. Das Laden der Assets und das Ausführen des PHP funktioniert genau wie erwartet, aber aus irgendeinem Grund kann ich die Parameter $ _GET nicht an das Fastcgi übergeben –

+0

Das Problem ist 'Alias' und' try_files'.Sie möchten Ihre Anwendung unter dem URI '/ app' ausführen, die Dinge wären ** sehr ** einfach, wenn'/pfad/zu/meine/application/'mit'/app' endet (der gleiche Unterverzeichnisname wie der URI) . –

Antwort

0

Sie haben eine Anwendung unter /path/to/my/app2/public installiert und möchten mit der URI /app darauf zugreifen.

Angenommen, wir können /app2/ als internen URI verwenden (der nicht mit anderen öffentlichen URIs kollidiert, die von diesem Server bedient werden - aber von Ihren Kunden nicht gesehen wird).

Sie haben eine PHP-Datei.

location ^~ /app { 
    rewrite ^/app(.*)$ /app2/public$1 last; 
}   

location ^~ /app2/ { 
    internal; 

    root /path/to/my; 
    index index.php; 

    try_files $uri $uri/ /app2/public/index.php$is_args$args; 

    location ~ \.php$ { 
     include fastcgi_params; 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param SCRIPT_FILENAME /path/to/my/app2/public/index.php; 
    } 
} 

Der erste Standort Block ändert lediglich die interne URI des Dokument-Root übereinstimmen (so können wir Wurzel statt alias verwenden). Der zweite Standortblock dient dem statischen Inhalt. Der dritte Standortblock ruft index.php auf.

Wie index.php die Abfragezeichenfolge erhält, ist Programm abhängig. Es wird einen der in fastcgi_params definierten Parameter verwenden. Normalerweise entweder REQUEST_URI oder QUERY_STRING. In beiden Fällen sollten beide Variablen mit der obigen Konfiguration beibehalten werden.

Der Modifizierer ^~ stellt sicher, dass diese Positionierungsblöcke Vorrang vor anderen regulären Positionierungsblöcken haben (falls vorhanden). Details siehe this document.

Verwandte Themen