nginx try_files, proxy_pass-und upstream

Ich Baue ein dockerised Test 'Plattform' für PHP-apps - speziell (für den moment) für WordPress. Ich bin mit PHPFarm zu dienen, unterschiedliche PHP-Versionen auf verschiedenen ports. Mithilfe von nginx in der front, ich habe sehr viel es Arbeit. ( https://github.com/richardtape/testit ist das Haupt-repo )

Das große Thema, ich bin vor jetzt ist immer WordPress die "pretty permalinks" zu arbeiten. In einem standard-nginx-setup, es ist nur ein Fall von so etwas wie

location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
}

Aber um der Lage sein, um schöne urls in der host-Maschine, und um eine code-Basis, ich bin mit etwas entlang der folgenden Zeilen:

server {
    listen 80;
    index index.php index.html index.htm;
    server_name 52.spaces.dev;

    location / {

        proxy_pass http://phpfarm_52;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    root /var/www;
}

upstream phpfarm_52{
    server phpfarm:8052;
}

Diese, so wie es da steht, funktioniert. (Es gibt 5 Regeln, ähnlich wie dies für PHP 5.3, 5.4, 5.5, 5.6 und 7) Die home-Seite geladen wird auf jede der verschiedenen server_names von der host-Maschine (und wenn du die Ausgabe der PHP-version auf jeden von Ihnen, können Sie sehen, dass Sie immer eine andere PHP-version).

Aber der zweite Wechsel ich zu einem 'internen' url (oder jeder nicht-root-d.h. http://52.spaces.dev/about/), bekomme ich ein 404. Ich habe versucht, etwas ähnliches zu

location / {
    try_files $uri $uri/ /index.php?$args
}

location ~ \.php$ {
    proxy_pass http://phpfarm_52;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $remote_addr;
}

Bekomme ich eine redirect-Schleife, je nachdem, ein paar verschiedene Möglichkeiten, die ich probiert habe entweder ist es nur eine Serie von 301-Weiterleitungen und die Seite nie geladen wird oder ein Fehler, wie

nginx_1      | 2016/04/08 20:31:29 [error] 5#5: *4 rewrite or internal redirection cycle while processing "/index.php", client: 192.168.99.1, server: 52.spaces.dev, request: "GET /favicon.ico HTTP/1.1", host: "52.spaces.dev", referrer: "http://52.spaces.dev/"

Ich bin stecken. Ich bin auch ziemlich neu in der nginx-Konfiguration (das kann offensichtlich sein), also kann ich auch etwas tun, völlig falsch und/oder dumm. Irgendwelche Vorschläge?

Was passiert, wenn Sie die curl phpfarm:8052/über, von innerhalb der Instanz? (Im Grunde, das ist, was Ihre erste proxy_pass). Wenn Sie auch bekommen, 404, was Aufruf der upstream erwarten Sie stattdessen?
Das selbst sollte einen 404, aber soweit ich es verstehe, sind die try_files $uri $uri/ /index.php?$args bedeutet, dass es sollte schließlich fallback auf die index.php (mit den entsprechenden args), die nicht einen 404 (dargestellt durch die Tatsache, dass die home-Seite funktioniert). Wenn ich die 'pretty' permalinks deaktiviert, d.h. alles läuft über den index.php), dann funktioniert es wie erwartet.

InformationsquelleAutor RichardTape | 2016-04-08

Schreibe einen Kommentar