Ich versuche, CachetHQ in nginx + php-fpm an einem bestimmten Ort bereitzustellen. Die Dokumentation gibt dies als Beispiel, das in status.example.com
(was funktioniert) dient:
Anstatt jedoch in status.example.com
zu dienen, möchte ich in example.com/status
dienen.
Ich hatte erwartet, dass dies funktionieren würde, aber von error.log sehe ich, dass es /etc/nginx/htmlindex.php
versucht, aber es sollte /mnt/data/site/www-cachet/public/index.php
sein:
Nach so vielen Stunden, in denen ich viele Kombinationen ausprobierte, war die Art, wie ich es funktionierte:
%Vor% Das Wichtigste war fastcgi_param
, ich musste es auf einen absoluten Pfad setzen anstatt auf $document_root$fastcgi_script_name
oder ähnliches. Ich bin mir nicht sicher, ob es eine gute Praxis ist, aber das Hinzufügen von alias
zum Block funktioniert einfach nicht, und weder nginx noch FastCGI zeigen uns den Pfad der Datei, die sie zu lesen versuchen.
Trotzdem konnte ich CachetHQ nicht gut arbeiten lassen. Problem ist, dass alle Pfade im Quellcode absolut sind, so dass sie nicht auf das Unterverzeichnis zeigen, in dem sich unsere Dateien befinden. Die Lösung war, etwas zu tun, was ich seit Beginn nicht wollte: hosten Sie es in einer Subdomain.
Lassen Sie mich mit der ursprünglichen Konfiguration beginnen, die Ihrer Meinung nach funktioniert, und versuchen Sie, sie für Ihre Anforderungen und die Ergebnisse zu ändern:
%Vor% Im Grunde wollen Sie alias
statt root
hier, und wahrscheinlich auch einen absoluten Pfad in dem haben final try_files
ebenfalls. Ich denke nicht, dass das Hinzufügen von zusätzlichen Präfixen in geschachtelten Speicherorten erforderlich ist, aber Sie sollten sicherstellen, dass der Root-Speicherort eine endgültige Übereinstimmung mit dem ^~
-Modifikator darstellt.
Der Haupttrick ist, denke ich, dass sogar mit der alias
Direktive die Dinge nicht so gut sind wie bei einem richtigen root
, also musst du sicherstellen, dass SCRIPT_FILENAME
richtig gesetzt ist. Dieser Teil scheint nicht ganz klar zu dokumentieren, und ich bin zu faul, um zu testen, ob $fastcgi_script_name
NGX Variable und fastcgi_index
Richtlinie schön spielen mit alias
- anstatt zu bestimmen versuchen, wie diese Arbeit (oder auch nicht), wir ein paar rewrite
Vorschriften wie einfach tun, und konstruieren SCRIPT_FILENAME
basierend auf den Ergebnissen stattdessen unserer Regeln zum Umschreiben. : -)
Allerdings würde ich denken, dass die zweite Rewrite-Regel (ebenso wie die fastcgi_index
, die sie ersetzt) auch ein No-Op sein könnte, denn wie sollten wir in einem \.php$
enden? location
wenn $uri
nicht bereits in .php
endet?
(Ebenso sind Sie frei zu versuchen, die erste Rewrite-Regel zu entfernen, auch, und ersetzt $uri
in SCRIPT_FILENAME
mit $fastcgi_script_name
, und sehen, ob noch Dinge funktionieren, aber das Internet from 2009 kann darauf hindeuten, dass sie nicht.)