Ich baue eine dockerisierte Testplattform für PHP-Apps – speziell (im Moment) für WordPress. Ich verwende PHPFarm, um verschiedene Versionen von PHP auf verschiedenen Ports bereitzustellen. Mit nginx vorne habe ich viel davon funktioniert. ( https://github.com/richardtape/testit ist das Hauptrepo)
Das große Problem, mit dem ich jetzt konfrontiert bin, ist, die „hübschen Permalinks“ von WordPress zum Laufen zu bringen. In einem Standard-Nginx-Setup handelt es sich nur um etwas wie
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
Aber um schöne URLs vom Host-Computer haben zu können und um eine Codebasis zu haben, verwende ich etwas in der folgenden Richtung:
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;
}
Das funktioniert so wie es aussieht. (Es gibt 5 weitere ähnliche Regeln für PHP 5.3, 5.4, 5.5, 5.6 und 7) Die Homepage wird auf jedem der verschiedenen server_names von der Hostmaschine geladen (und wenn Sie die PHP-Version auf jedem von ihnen ausgeben, können Sie sehen Sie, dass Sie eine andere PHP-Version erhalten).
Beim zweiten Mal wechsle ich jedoch zu einer „internen“ URL (oder einer beliebigen Nicht-Root-URL, dh http://52.spaces.dev/about/), erhalte ich eine 404. Ich habe etwas Ähnliches versucht
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;
}
Ich erhalte eine Umleitungsschleife, abhängig von ein paar verschiedenen Möglichkeiten, die ich ausprobiert habe, war es entweder nur eine Reihe von 301-Umleitungen und die Seite wird nie geladen oder ein Fehler wie z
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 stecke fest. Ich bin auch ziemlich neu in der nginx-Konfiguration (was offensichtlich sein mag), also mache ich vielleicht etwas völlig falsch und/oder dumm. Irgendwelche Vorschläge?
Was passiert, wenn Sie phpfarm:8052/about innerhalb der Instanz curlen? (Im Grunde macht das Ihr anfänglicher Proxy_pass). Wenn Sie auch 404 erhalten, welchen Aufruf an den Upstream würden Sie stattdessen erwarten?
– Geschichtenerzähler
11. April 2016 um 11:47 Uhr
Das selbst sollte ein 404 sein, aber soweit ich es verstehe, ist das
try_files $uri $uri/ /index.php?$args
bedeutet, dass es schließlich auf die index.php (mit entsprechenden Argumenten) zurückgreifen sollte, was kein 404 wäre (wie die Tatsache zeigt, dass die Homepage funktioniert). Wenn ich die ‘hübschen’ Permalinks deaktiviert lasse, (dh alles läuft über die index.php) dann funktioniert es wie erwartet.– RichardTape
11. April 2016 um 15:56 Uhr