Ich hatte am Samstag nichts zu tun, also habe ich versucht, yii2 zu installieren und bereitzustellen. Während des Installationsvorgangs gab es kein Problem, aber als ich es auf Nginx bereitstellte, stieß ich auf ein 502-schlechtes Gateway-Problem Zeit, es zu reparieren. Dieses Problem ist mir bei der Bereitstellung von yii2 noch nie begegnet, daher notiere ich es hier als Referenz.
1. Installations- und Bereitstellungsumgebung
Betriebssystem: macOS, PHP-Version: 5.6, Nginx-Version: 1.10.1, YII2-Version: 2.0.
2, Installation von yii2
Die Installation von yii2 ist sehr einfach. Sehen Sie sich einfach das Handbuch auf der offiziellen Website an. Was ich hier installiert habe, ist yii2-app-advanced (Yii 2 Advanced Project Template). Befolgen Sie einfach die Installationsanweisungen in der README-Datei. Ich werde nicht näher darauf eingehen.
3. Bereitstellung von yii2 auf Nginx
Tatsächlich hat die README-Datei des yii2-app-advanced-Projekts sehr deutlich gemacht, wie man es auf Nginx bereitstellt. Wenn Sie die Schritte befolgen, sollte es keine Probleme geben. Aber ich war während der Bereitstellung faul und habe direkt die Nginx-Bereitstellungsparameter in der README-Datei verwendet, was zu einem 502 Bad Gateway-Fehler führte.
Die Antwortcodes, die im HTTP-Statuscode mit 5 beginnen, werden alle von der Serverseite verursacht, schauen Sie sich also das Nginx-Protokoll an:
Fehlerprotokoll:
Als ich Upstream sah: „fastcgi: //127.0.0.1:9090“, schien der Port falsch zu sein, also überprüfte ich die Konfiguration des virtuellen Hosts:
Werfen wir einen Blick auf die Konfiguration von php-fpm:
Natürlich ist der vom virtuellen Nginx-Host angegebene FastCGI-Server-Überwachungsport falsch, was dazu führt, dass Nginx keine Antwort vom FastCGI-Server erhält. Wenn der Browser eine Anfrage stellt, gibt Nginx daher einen 502-Statuscode an den Browser zurück und teilt dem Browser mit, dass der Upstream-FastCGI-Server nicht geantwortet hat.
4, Lösung
Ändern Sie im virtuellen Nginx-Host den durch fastcgi_pass angegebenen Port korrekt, und dieser Fehler wird behoben.
5, Zusammenfassung
(1) Fehler, die mit dem HTTP-Statuscode 5 beginnen, werden durch den Server (Webserver) verursacht, der als Gateway oder Proxy fungiert. Er wird vom Upstream empfangen Server (Fastcgi-Server) auf eine ungültige Antwort.
(2) fastcgi_pass ist eine Konfigurationsanweisung des Moduls ngx_http_fastcgi_module. Sie gibt die Adresse des Fastcgi-Servers an. Die Beschreibung im Nginx-Dokument lautet wie folgt:
<span style="color: #008080;"> 1</span> <span style="color: #000000;">Syntax: fastcgi_pass address; </span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">Default</span><span style="color: #000000;">: — </span><span style="color: #008080;"> 3</span> Context: location, <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">in</span><span style="color: #000000;"> location </span><span style="color: #008080;"> 4</span> <span style="color: #008080;"> 5</span> <span style="color: #000000;">Sets the address of a FastCGI server. The address can be specified as a domain name or IP address, and a port: </span><span style="color: #008080;"> 6</span> fastcgi_pass localhost:9000<span style="color: #000000;">; </span><span style="color: #008080;"> 7</span> <span style="color: #008080;"> 8</span> or as a UNIX-<span style="color: #000000;">domain socket path: </span><span style="color: #008080;"> 9</span> fastcgi_pass unix:/tmp/<span style="color: #000000;">fastcgi.socket; </span><span style="color: #008080;">10</span> <span style="color: #008080;">11</span> <span style="color: #0000ff;">If</span> a domain name resolves to several addresses, all of them will be used <span style="color: #0000ff;">in</span> a round-robin fashion. <span style="color: #0000ff;">In</span> addition, an address can be specified as a server group.
Referenz:
HTTP-Statuscode
fastcgi_pass
Syntax: | <strong>fastcgi_pass</strong> <code><em>address</em> ; |
---|---|
Default: | — |
Context: |
location , if in location
|