Detaillierte Erklärung der Nginx-Konfigurationsdatei

Detaillierte Erklärung der Nginx-Konfigurationsdatei

Die Hauptkonfigurationsdatei von Nginx ist nginx.conf, die aus drei Teilen besteht: globaler Block, Ereignisblock und HTTP-Block. Der HTTP-Block umfasst auch den globalen HTTP-Block und mehrere Serverblöcke. Jeder Serverblock kann einen globalen Serverblock und mehrere Standortblöcke enthalten. Zwischen den im selben Konfigurationsblock verschachtelten Konfigurationsblöcken besteht keine Reihenfolgebeziehung.

Die Konfigurationsdatei unterstützt eine große Anzahl konfigurierbarer Anweisungen, von denen die meisten nicht spezifisch für einen bestimmten Block sind. Derselbe Befehl in Blöcken unterschiedlicher Ebenen hat unterschiedliche Gültigkeitsbereiche. Im Allgemeinen können Befehle in einem Block höherer Ebene auf den Block wirken, in dem sie sich befinden, und auf alle Blöcke niedrigerer Ebene, die in diesem Block enthalten sind. Wenn eine Anweisung gleichzeitig in zwei Blöcken unterschiedlicher Ebenen erscheint, wird das „Proximity-Prinzip“ angewendet, d. h. die Konfiguration im Block der niedrigeren Ebene hat Vorrang. Wenn beispielsweise eine Anweisung sowohl im globalen HTTP-Block als auch im Serverblock vorkommt und die Konfigurationen unterschiedlich sind, sollte die Konfiguration im Serverblock Vorrang haben.

Der Aufbau der gesamten Konfigurationsdatei ist wie folgt:

#globaler Block#Benutzer niemand;
Arbeiterprozesse 1;

#Ereignisblock Ereignisse {
 Arbeiterverbindungen 1024;
}

#http block http {
 #http globaler Block schließt mime.types ein;
 Standardtyp Anwendung/Oktett-Stream;
 sendfile an;
 KeepAlive-Timeout 65;
 #Server blockieren Server {
  #Server globaler Block abhören 8000;
  Servername localhost;
  #Standortblock Standort / {
   Stamm-HTML;
   Index Index.html Index.htm;
  }
  Fehlerseite 500 502 503 504 /50x.html;
  Standort = /50x.html {
   Stamm-HTML;
  }
 }
 #Hier können mehrere Serverblöcke vorhanden sein server {
  ...
 }
}

Globale Blöcke

Der globale Block ist der Teil der Standardkonfigurationsdatei vom Anfang bis zum Ereignisblock. Er legt hauptsächlich einige Konfigurationsanweisungen fest, die den Gesamtbetrieb des Nginx-Servers beeinflussen. Daher ist der Umfang dieser Anweisungen der globale Nginx-Server.

Dazu gehört normalerweise die Konfiguration des Benutzers (der Gruppe), der/die den Nginx-Server ausführt, die Anzahl der zulässigen Arbeitsprozesse, der PID-Speicherpfad des Nginx-Prozesses, der Speicherpfad und -typ des Protokolls sowie die Einführung von Konfigurationsdateien.

#Geben Sie den Benutzer und die Benutzergruppe an, die den nginx-Dienst ausführen können. Dies kann nur im globalen Block konfiguriert werden. #user [Benutzer] [Gruppe]
# Kommentieren Sie die Benutzerdirektive aus oder konfigurieren Sie sie auf „none“, damit alle Benutzer sie ausführen können. # user nobody nobody;
# Die Benutzeranweisung funktioniert unter Windows nicht. Wenn Sie einen bestimmten Benutzer und eine bestimmte Benutzergruppe angeben, wird eine kleine Warnung ausgegeben. # nginx: [warn] „user“ wird nicht unterstützt, ignoriert in D:\software\nginx-1.18.0/conf/nginx.conf:2

#Geben Sie die Anzahl der Arbeitsthreads an. Sie können eine bestimmte Anzahl von Prozessen angeben oder den automatischen Modus verwenden. Dieser Befehl kann nur im globalen Block # worker_processes number | auto; konfiguriert werden.
# Beispiel: Geben Sie 4 Worker-Threads an. In diesem Fall werden ein Master-Prozess und 4 Worker-Prozesse generiert. # worker_processes 4;

#Geben Sie den Pfad an, in dem die PID-Datei gespeichert ist. Dieser Befehl kann nur im globalen Block konfiguriert werden. #pid logs/nginx.pid;

#Geben Sie den Pfad und die Protokollebene des Fehlerprotokolls an. Diese Anweisung kann im globalen Block, im HTTP-Block, im Serverblock und im Standortblock konfiguriert werden. (Was sind die Unterschiede bei verschiedenen Blockkonfigurationen?)
# Das Protokoll auf Debug-Ebene muss mit --with-debug kompiliert werden, um den Debug-Schalter zu aktivieren# error_log [Pfad] [debug | Info | Hinweis | Warnung | Fehler | Krit | Alarm | Emerg] 
# error_log Protokolle/error.log Hinweis;
# Fehlerprotokollprotokolle/Fehlerprotokollinfo;

Ereignisse-Block

Die im Ereignisblock enthaltenen Anweisungen wirken sich hauptsächlich auf die Netzwerkverbindung zwischen dem Nginx-Server und dem Benutzer aus. Zu den häufig verwendeten Einstellungen gehören, ob die Serialisierung von Netzwerkverbindungen unter mehreren Arbeitsprozessen aktiviert werden soll, ob der gleichzeitige Empfang mehrerer Netzwerkverbindungen zulässig sein soll, welches ereignisgesteuerte Modell zur Verarbeitung von Verbindungsanforderungen ausgewählt werden soll und die maximale Anzahl von Verbindungen, die jeder Arbeitsprozess gleichzeitig unterstützen kann.

Die Anweisungen in diesem Teil haben einen großen Einfluss auf die Leistung des Nginx-Servers und sollten entsprechend der tatsächlichen Situation in der tatsächlichen Konfiguration flexibel angepasst werden.

# Wenn zu einem bestimmten Zeitpunkt nur eine Netzwerkverbindung zustande kommt, werden mehrere schlafende Prozesse gleichzeitig geweckt, aber nur ein Prozess kann die Verbindung herstellen. Wenn jedes Mal zu viele Prozesse aufgeweckt werden, wird die Systemleistung teilweise beeinträchtigt. Dieses Problem kann beim Multiprozess-Nginx-Server auftreten.
# Wenn aktiviert, serialisieren mehrere Nginx-Prozesse die empfangenen Verbindungen, um zu verhindern, dass mehrere Prozesse um die Verbindung konkurrieren. # Es ist standardmäßig aktiviert und kann nur im Ereignisblock konfiguriert werden. # accept_mutex on | off;

# Wenn multi_accept deaktiviert ist, kann ein Nginx-Arbeitsprozess immer nur eine neue Verbindung gleichzeitig akzeptieren. Andernfalls kann ein einzelner Arbeitsprozess alle neuen Verbindungen gleichzeitig annehmen. 
# Diese Anweisung wird ignoriert, wenn Nginx die Verbindungsmethode „kqueue“ verwendet, da diese Methode die Anzahl der neuen Verbindungen meldet, die auf die Annahme warten.
# Die Standardeinstellung ist „Aus“ und kann nur im Ereignisblock konfiguriert werden. # multi_accept on | off;

#Geben Sie an, welches Netzwerk-E/A-Modell verwendet werden soll. Die verfügbaren Methoden sind: select, poll, kqueue, epoll, rtsig, /dev/poll und eventport. Im Allgemeinen unterstützen Betriebssysteme nicht alle der oben genannten Modelle.
# Kann nur im Ereignisblock konfiguriert werden# use method
# epoll verwenden

# Legen Sie die maximale Anzahl von Verbindungen fest, die für jeden Worker-Prozess gleichzeitig geöffnet werden dürfen. Wenn die Anzahl der von jedem Worker-Prozess akzeptierten Verbindungen diesen Wert überschreitet, werden keine weiteren Verbindungen mehr akzeptiert. # Wenn alle Worker-Prozesse voll sind, wird die Verbindung in den Logback-Modus versetzt. Nachdem der Logback-Modus voll ist, wird die Verbindung abgelehnt. # Kann nur im Ereignisblock konfiguriert werden. # Hinweis: Dieser Wert darf die maximale Anzahl von Dateien, die vom System unterstützt werden, oder die maximale Anzahl von Dateien, die von einem einzelnen Prozess unterstützt werden, nicht überschreiten. Weitere Einzelheiten finden Sie in diesem Artikel: https://cloud.tencent.com/developer/article/1114773
# Arbeiterverbindungen 1024;

http-Block

Der http-Block ist ein wichtiger Bestandteil der Nginx-Serverkonfiguration. Die meisten Funktionen wie Proxy-, Cache- und Log-Definition sowie die Konfiguration von Drittanbietermodulen können in diesem Modul untergebracht werden.

Wie bereits erwähnt, kann der http-Block seine eigenen globalen Blöcke und Serverblöcke enthalten, und der Serverblock kann außerdem Standortblöcke enthalten. In diesem Buch verwenden wir "http-globaler Block", um den globalen Block in http darzustellen, d. h. den Teil des http-Blocks, der nicht im Serverblock enthalten ist.

Zu den Anweisungen, die im globalen HTTP-Block konfiguriert werden können, gehören Dateiimport, MIME-Typ-Definition, Protokollanpassung, ob Sendfile zum Übertragen von Dateien verwendet werden soll, Verbindungstimeout und die Obergrenze einzelner Verbindungsanforderungen.

# Gängige Browser können eine Vielzahl von Texten, Medien und anderen Ressourcen anzeigen, darunter HTML, XML, GIF und Flash. Um diese Ressourcen unterscheiden zu können, muss der Browser den MIME-Typ verwenden. Mit anderen Worten ist der MIME-Typ der Medientyp einer Netzwerkressource. Als Webserver muss der Nginx-Server in der Lage sein, den vom Front-End angeforderten Ressourcentyp zu identifizieren.

# Die Include-Direktive dient zum Einbinden anderer Konfigurationsdateien. Sie kann an beliebiger Stelle in der Konfigurationsdatei platziert werden. Beachten Sie jedoch, dass die von Ihnen eingebundene Konfigurationsdatei den Konfigurationsspezifikationen entsprechen muss. Wenn die von Ihnen eingebundene Konfiguration beispielsweise die Konfiguration der Direktive worker_processes ist und Sie diese Direktive in den http-Block einbinden, wird dies definitiv nicht funktionieren. Wie oben erwähnt, kann die Direktive worker_processes nur im globalen Block stehen.
# Der folgende Befehl schließt mime.types ein. mime.types und ngin.cfg befinden sich im selben Verzeichnis. Wenn sie sich auf unterschiedlichen Ebenen befinden, muss der spezifische Pfad angegeben werden. # include mime.types;

# Konfigurieren Sie den Standardtyp. Wenn diese Anweisung nicht hinzugefügt wird, ist der Standardwert „text/plain“.
# Diese Anweisung kann auch im HTTP-Block, Serverblock oder Standortblock konfiguriert werden.
# Standardtyp Anwendung/Oktett-Stream;

# access_log-Konfiguration, diese Direktive kann im HTTP-Block, Serverblock oder Standortblock festgelegt werden. # Im globalen Block haben wir die Direktive errer_log eingeführt, die verwendet wird, um den Protokollspeicher und die Protokollebene zu konfigurieren, wenn der Nginx-Prozess ausgeführt wird. Das hier erwähnte Protokoll unterscheidet sich vom herkömmlichen. Es bezieht sich auf das Protokoll, das den Serviceprozess des Nginx-Servers als Antwort auf die Front-End-Anforderung aufzeichnet. # access_log-Pfad [Format [Puffer = Größe]]
# Wenn Sie access_log deaktivieren möchten, können Sie den folgenden Befehl verwenden: # access_log off;

# Die Direktive log_format wird verwendet, um das Protokollformat zu definieren. Diese Direktive kann nur im http-Block konfiguriert werden. # log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
# Nachdem Sie das obige Protokollformat definiert haben, können Sie das Protokoll in der folgenden Form verwenden # access_log logs/access.log main;

# Sendfile-Dateiübertragung aktivieren oder deaktivieren. Dies kann im HTTP-Block, Serverblock oder Standortblock konfiguriert werden. # sendfile on | off;

# Legen Sie die maximale Datengröße der Sendedatei fest. Diese Anweisung kann im HTTP-Block, Serverblock oder Standortblock konfiguriert werden. # sendfile_max_chunk size;
# Wenn der Größenwert größer als 0 ist, kann die maximale Datenmenge, die von jedem Arbeitsprozess des Nginx-Prozesses bei jedem Aufruf von sendfile() übertragen wird, diesen Wert nicht überschreiten (hier beträgt er 128 KB, sodass 128 KB bei jedem Aufruf nicht überschritten werden können). Wenn er auf 0 gesetzt ist, gibt es keine Begrenzung. Der Standardwert ist 0.
# sendfile_max_chunk 128k;

# Konfigurieren Sie das Verbindungstimeout. Diese Anweisung kann im HTTP-Block, Serverblock oder Standortblock konfiguriert werden.
# Nachdem eine Sitzungsverbindung mit dem Benutzer hergestellt wurde, kann der Nginx-Server diese Verbindungen für einen bestimmten Zeitraum offen halten. # Timeout, die Beibehaltungszeit der serverseitigen Verbindung. Der Standardwert beträgt 75 s; header_timeout, optional, legt das Timeout im Keep-Alive-Feld im Header der Antwortnachricht fest: „Keep-Alive: timeout = header_timeout“. Dieser Hinweis in der Nachricht kann von Mozilla oder Konqueror erkannt werden.
# keepalive_timeout Zeitüberschreitung [header_timeout]
# Die folgende Konfiguration bedeutet, dass der Server die Verbindung 120 Sekunden lang aufrechterhält und die Timeout-Zeit des Keep-Alive-Felds im Header der an den Client gesendeten Antwortnachricht auf 100 Sekunden eingestellt ist.
# keepalive_timeout 120s 100s

# Konfigurieren Sie die Obergrenze für die Anzahl einzelner Verbindungsanforderungen. Diese Anweisung kann im HTTP-Block, Serverblock oder Standortblock konfiguriert werden.
# Nachdem der Nginx-Server und der Client eine Sitzungsverbindung hergestellt haben, sendet der Client eine Anfrage über diese Verbindung. Die Direktive „keepalive_requests“ wird verwendet, um die Anzahl der Anfragen zu begrenzen, die ein Benutzer über eine bestimmte Verbindung an den Nginx-Server senden kann. Der Standardwert ist 100
# Keepalive_Requests-Nummer;

Serverblock

Serverblöcke sind eng mit dem Konzept der „virtuellen Hosts“ verwandt.

Virtuelles Hosting, auch als virtueller Server, Hosting-Speicherplatz oder Webspace bezeichnet, ist eine Technologie. Diese Technologie wurde entwickelt, um die Kosten für Internet-Server-Hardware zu senken. Der „Host“ oder „Raum“ ist hier eine Erweiterung des physischen Servers. Das Hardwaresystem kann auf einem Servercluster oder einem einzelnen Server usw. basieren. Die virtuelle Host-Technologie wird hauptsächlich in mehreren Diensten wie HTTP, FTP und E-Mail verwendet. Sie teilt einen oder alle Dienstinhalte eines Servers logisch in mehrere Diensteinheiten auf, die nach außen als mehrere Server erscheinen und so die Hardwareressourcen des Servers voll ausnutzen. Aus Benutzersicht ist ein virtueller Host genau dasselbe wie ein eigenständiger Hardware-Host.

Wenn Sie den Nginx-Server zum Bereitstellen von Webdiensten verwenden, kann durch die Verwendung der virtuellen Hosttechnologie vermieden werden, dass für jede auszuführende Website ein separater Nginx-Server bereitgestellt werden muss, und es ist nicht erforderlich, für jede Website einen Satz von Nginx-Prozessen auszuführen. Durch die virtuelle Host-Technologie kann der Nginx-Server nur einen Satz von Nginx-Prozessen auf demselben Server ausführen und mehrere Websites betreiben.

Wie bereits erwähnt, kann jeder HTTP-Block mehrere Serverblöcke enthalten, und jeder Serverblock entspricht einem virtuellen Host. Mehrere Hosts können darin gemeinsam Dienste bereitstellen und so zusammen eine Gruppe logisch eng miteinander verbundener Dienste (oder Websites) für die Außenwelt bereitstellen.

Wie der HTTP-Block kann auch der Serverblock einen eigenen globalen Block und mehrere Standortblöcke enthalten. Im globalen Serverblock sind die beiden häufigsten Konfigurationselemente die Listener-Konfiguration dieses virtuellen Hosts und der Name oder die IP-Konfiguration dieses virtuellen Hosts.

Listen-Direktive

Der wichtigste Befehl im Serverblock ist der Listen-Befehl, der über drei Konfigurationssyntaxen verfügt. Der Standardkonfigurationswert dieser Anweisung lautet: listen *:80 | *:8000; diese Anweisung kann nur im Serverblock konfiguriert werden.

//Erste Abhöradresse[:Port] [Standardserver] [SSL] [http2 | SPDY] [Proxyprotokoll] [setfib=Nummer] [Fastopen=Nummer] [Backlog=Nummer] [rcvbuf=Größe] [sndbuf=Größe] [accept_filter=Filter] [verzögert] [binden] [ipv6only=an|aus] [Port wiederverwenden] [so_keepalive=an|aus|[keepidle]:[keepintvl]:[keepcnt]];

//Der zweite Abhörport [default_server] [ssl] [http2 | spdy] [proxy_protocol] [setfib=Nummer] [fastopen=Nummer] [backlog=Nummer] [rcvbuf=Größe] [sndbuf=Größe] [accept_filter=Filter] [deferred] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

//Der dritte Typ (Sie müssen sich nicht darauf konzentrieren)
listen unix:Pfad [Standardserver] [SSL] [http2 | SPDY] [Proxyprotokoll] [Backlog=Nummer] [rcvbuf=Größe] [sndbuf=Größe] [Accept_Filter=Filter] [Verzögert] [Binden] [so_keepalive=Ein|Aus|[Keepidle]:[Keepintvl]:[Keepcnt]];
Die Konfiguration des Listen-Befehls ist sehr flexibel. Sie können eine IP-Adresse, einen Port oder sowohl eine IP-Adresse als auch einen Port angeben.

listen 127.0.0.1:8000; #Nur auf Anfragen von der IP 127.0.0.1 und Port 8000 hören. listen 127.0.0.1; #Nur auf Anfragen von der IP 127.0.0.1 und Port 80 hören (keinen Port angeben, Standard ist 80)
listen 8000; #Auf Anfragen von allen IPs an Port 8000 warten listen *:8000; #Dasselbe wie oben listen localhost:8000; #Dasselbe wie der erste Effekt

Im Folgenden sind einige wichtige Parameter aufgeführt:

  • Adresse: Die abzuhörende IP-Adresse (die IP-Adresse der Anforderungsquelle). Wenn es sich um eine IPv6-Adresse handelt, muss sie in eckige Klammern "[]" eingeschlossen werden, z. B. [fe80::1].
  • Port: Portnummer. Wenn nur die IP-Adresse, nicht aber die Portnummer angegeben ist, wird Port 80 verwendet. Ein Hinweis hierzu: Wenn Sie die Listen-Direktive überhaupt nicht konfigurieren, verwenden Sie *:80, wenn nginx mit Superuser-Berechtigungen ausgeführt wird, andernfalls *:8000. Mehrere virtuelle Hosts können gleichzeitig auf demselben Port lauschen, der Servername muss jedoch auf unterschiedliche Werte eingestellt werden.
  • default_server: Wenn über Host kein entsprechender virtueller Host gefunden wird, erfolgt die Verarbeitung über diesen virtuellen Host. Ausführlichere Informationen finden Sie in diesem gut geschriebenen Artikel.
  • backlog=number: Legt die maximale Anzahl von Netzwerkverbindungen fest, die die Abhörfunktion listen() gleichzeitig im angehaltenen Zustand zulässt. Der Standardwert ist -1 in FreeBSD und 511 auf anderen Plattformen.
  • accept_filter=filter, legen Sie den Abhörport zum Filtern von Anfragen fest. Der gefilterte Inhalt kann nicht empfangen und verarbeitet werden. Dieser Befehl ist nur auf FreeBSD- und NetBSD 5.0+-Plattformen gültig. Der Filter kann auf dataready oder httpready eingestellt werden. Interessierte Leser können die offizielle Dokumentation von Nginx zu Rate ziehen.
  • binden: Bezeichner, verwenden Sie ein separates Bind(), um diese Adresse: diesen Port zu verarbeiten. Im Allgemeinen verwendet der Nginx-Server für mehrere Verbindungen mit demselben Port, aber unterschiedlichen IP-Adressen nur einen Abhörbefehl und verwendet Bind(), um alle Verbindungen mit demselben Port zu verarbeiten.
  • ssl: Kennung, legt die Sitzungsverbindung so fest, dass der SSL-Modus verwendet wird. Diese Kennung bezieht sich auf den vom Nginx-Server bereitgestellten HTTPS-Dienst.

Die Verwendung des Listen-Befehls scheint kompliziert, ist aber bei allgemeiner Verwendung relativ einfach und erfordert keine allzu komplizierte Konfiguration.

server_name-Direktive

Der zum Konfigurieren des virtuellen Hosts verwendete Name. Die Syntax lautet:

Syntax: Servername Name ...;
Standard: 
Servername "";
Kontext: Server

Als Name kann nur ein Name angegeben werden, es können aber auch mehrere Namen parallel aufgeführt werden, getrennt durch Leerzeichen. Jeder Name ist ein Domänenname, der aus zwei oder drei durch Punkte „.“ getrennten Segmenten besteht. Zum Beispiel

Servername myserver.com www.myserver.com

In diesem Beispiel wird der Name dieses virtuellen Hosts auf myserver.com oder www.myserver.com festgelegt. Der Nginx-Server gibt den Vornamen als primären Namen für diesen virtuellen Host an.

Das Platzhalterzeichen „*“ kann im Namen verwendet werden, allerdings nur im ersten oder letzten Segment eines Namens, der aus drei Zeichenfolgen besteht, oder im letzten Segment eines Namens, der aus zwei Zeichenfolgen besteht, wie zum Beispiel:

Servername meinServer.* *.meinServer.com

Darüber hinaus unterstützt Name auch reguläre Ausdrücke. Ich werde hier nicht ins Detail gehen.

Da die Direktive „server_name“ zwei Möglichkeiten zur Konfiguration von Namen unterstützt: die Verwendung von Platzhaltern und regulären Ausdrücken. In einer Konfigurationsdatei mit mehreren virtuellen Hosts kann ein Name möglicherweise erfolgreich mit dem Servernamen mehrerer virtueller Hosts abgeglichen werden. Welcher virtuelle Host soll also die Anfrage von diesem Namen verarbeiten? Der Nginx-Server trifft folgende Vorkehrungen:

a. Für verschiedene Matching-Methoden werden virtuelle Hosts entsprechend der folgenden Priorität ausgewählt und die Anforderungen an der Vorderseite werden zuerst verarbeitet.

① Servername genau abgleichen
② Der Platzhalter stimmt am Anfang erfolgreich mit dem Servernamen überein. ③ Der Platzhalter stimmt am Ende erfolgreich mit dem Servernamen überein. ④ Der reguläre Ausdruck stimmt erfolgreich mit dem Servernamen überein.

b. Wenn bei den oben genannten vier Übereinstimmungsmethoden server_name mehrere Male erfolgreich mit den Übereinstimmungsmethoden mit derselben Priorität übereinstimmt, verarbeitet der virtuelle Host, der beim ersten Mal erfolgreich übereinstimmt, die Anforderung.

Manchmal möchten wir eine virtuelle Hostkonfiguration basierend auf IP-Adressen verwenden. Beispielsweise wird der Zugriff auf 192.168.1.31 vom virtuellen Host 1 und der Zugriff auf 192.168.1.32 vom virtuellen Host 2 gehandhabt.

Zu diesem Zeitpunkt müssen wir zuerst den Alias ​​an die Netzwerkkarte binden. Beispielsweise ist die zuvor an die Netzwerkkarte gebundene IP 192.168.1.30. Binden Sie nun beide IPs 192.168.1.31 und 192.168.1.32 an diese Netzwerkkarte, dann erreichen Anfragen an diese beiden IPs diesen Computer.

Führen Sie nach dem Binden des Alias ​​die folgende Konfiguration durch:

http
{
 {
 hören: 80;
 Servername: 192.168.1.31;
  ...
 }
 {
 hören: 80;
 Servername: 192.168.1.32;
  ...
 }
}

Standortblock

Jeder Serverblock kann mehrere Standortblöcke enthalten. Es spielt im gesamten Nginx-Konfigurationsdokument eine wichtige Rolle, und die Flexibilität des Nginx-Servers in vielen Funktionen spiegelt sich häufig in der Konfiguration der Standortdirektive wider.

Die Hauptfunktion des Standortblocks besteht darin, die Zeichenfolge (den Teil „/uri-string“ im vorherigen Beispiel) mit Ausnahme des virtuellen Hostnamens (der auch ein IP-Alias ​​sein kann, was später ausführlich erläutert wird) basierend auf der vom Nginx-Server empfangenen Anforderungszeichenfolge (z. B. Servername/uri-string) abzugleichen und die spezifische Anforderung zu verarbeiten. Funktionen wie Adressorientierung, Daten-Caching und Antwortsteuerung sind alle in diesem Teil implementiert. Viele Module von Drittanbietern bieten auch Funktionen im Standortblock.

Die grammatische Struktur des Standorts, die in der offiziellen Nginx-Dokumentation definiert ist, lautet:

Standort [ = | ~ | ~* | ^~ ] uri { ... }

Die URI-Variable ist die abzugleichende Anforderungszeichenfolge. Dabei kann es sich um eine Zeichenfolge ohne regulären Ausdruck, z. B. /myserver.php, oder um eine Zeichenfolge mit einem regulären Ausdruck, z. B. .php$ (was auf eine URL hinweist, die mit .php endet), handeln. Der Einfachheit halber vereinbaren wir, dass URIs ohne reguläre Ausdrücke als „Standard-URIs“ und URIs mit regulären Ausdrücken als „reguläre URIs“ bezeichnet werden.

Der Teil in eckigen Klammern ist optional und wird verwendet, um die Art und Weise zu ändern, in der die Anforderungszeichenfolge mit der URI übereinstimmt. Bevor wir die Bedeutung der vier Flags vorstellen, müssen wir verstehen, wie der Nginx-Server nach der URI des Standortblocks im Serverblock sucht und diese verwendet, um die Anforderungszeichenfolge abzugleichen, wenn diese Option nicht hinzugefügt wird.

Wenn diese Option nicht hinzugefügt wird, durchsucht der Nginx-Server zunächst mehrere Standortblöcke im Serverblock, um festzustellen, ob eine Übereinstimmung zwischen der Standard-URI und der Anforderungszeichenfolge vorliegt. Wenn mehrere Übereinstimmungen vorliegen, wird die mit der höchsten Übereinstimmung aufgezeichnet. Der Server gleicht dann die Anforderungszeichenfolge mit der regulären URI im Standortblock ab. Wenn die erste reguläre URI erfolgreich übereinstimmt, endet die Suche und der Standortblock wird zum Verarbeiten der Anforderung verwendet. Wenn alle regulären Übereinstimmungen fehlschlagen, wird der Standortblock mit der höchsten gerade aufgezeichneten Übereinstimmung zum Verarbeiten der Anforderung verwendet.

Wenn wir den obigen Inhalt kennen, können wir die Bedeutung jeder Flagge in den optionalen Optionen erklären:

  • Vor der Standard-URI wird „=“ verwendet, sodass die Anforderungszeichenfolge strikt mit der URI übereinstimmen muss. Wenn eine Übereinstimmung gefunden wird, beenden Sie die Suche und verarbeiten Sie die Anfrage sofort.
  • „^~“ wird vor der Standard-URI verwendet, wodurch der Nginx-Server den Speicherort mit der höchsten Übereinstimmung zwischen der Bezeichner-URI und der Anforderungszeichenfolge finden und diesen Speicherort sofort zum Verarbeiten der Anforderung verwenden muss, anstatt die reguläre URI im Speicherortblock zum Abgleichen mit der Anforderungszeichenfolge zu verwenden.
  • „~“ wird verwendet, um anzuzeigen, dass die URI einen regulären Ausdruck enthält und zwischen Groß- und Kleinschreibung unterscheidet.
  • „~*“ wird verwendet, um anzuzeigen, dass die URI einen regulären Ausdruck enthält und nicht zwischen Groß- und Kleinschreibung unterscheidet. Beachten Sie, dass Sie das Symbol „~“ oder „~*“ verwenden müssen, wenn die URI einen regulären Ausdruck enthält.

Wir wissen, dass bei der Übertragung der URI durch den Browser einige Zeichen URL-codiert werden, beispielsweise werden Leerzeichen als „%20“, Fragezeichen als „%3f“ usw. codiert. Eine Funktion von „~“ besteht darin, dass diese Symbole in der URI kodiert werden. Wenn beispielsweise die vom Standortblock empfangene URI „/html/%20/data“ lautet, kann eine erfolgreiche Übereinstimmung erzielt werden, wenn der Nginx-Server nach dem als „~ /html/ /data“ konfigurierten Standort sucht.

Root-Direktive

Mit dieser Anweisung wird das Stammverzeichnis für die Anforderung von Ressourcen festgelegt. Diese Anweisung kann im HTTP-Block, Serverblock oder Standortblock konfiguriert werden. Da in den meisten Fällen bei der Verwendung eines Nginx-Servers mehrere Standortblöcke konfiguriert werden müssen, um verschiedene Anforderungen separat zu verarbeiten, wird diese Anweisung normalerweise im Standortblock festgelegt.

Stammpfad

Die Pfadvariable kann die meisten vom Nginx-Server voreingestellten Variablen enthalten, mit Ausnahme von $document_root und $realpath_root.

Alisa-Richtlinie
Indexdirektive
error_page-Direktive

Ein paar Anmerkungen#

Oben sind einige Konfigurationsanweisungen für den globalen Block, den Ereignisblock und den HTTP-Block in Nginx aufgeführt, die Anweisungen von Nginx gehen jedoch weit darüber hinaus. Tatsächlich besteht der Hauptzweck hier darin, die Struktur der gesamten Konfigurationsdatei zu erklären. Wenn Sie eine umfassendere Einführung in Befehle und Module wünschen, wird empfohlen, die offizielle Website von Nginx zu besuchen.

Ein Beispiel für eine Konfigurationsdatei#

######Detaillierte Erklärung der Nginx-Konfigurationsdatei nginx.conf auf Chinesisch######

#Definieren Sie den Benutzer und die Benutzergruppe, die Nginx als Benutzer www www ausführt;

#Anzahl der Nginx-Prozesse. Es wird empfohlen, den Wert gleich der Gesamtzahl der CPU-Kerne zu setzen.
Arbeitsprozesse 8;
 
#Globaler Fehlerprotokolldefinitionstyp, [ debug | info | notice | warn | error | crit ]
Fehlerprotokoll /usr/local/nginx/logs/error.log info;

#PID-Datei verarbeiten pid /usr/local/nginx/logs/nginx.pid;

#Geben Sie die maximale Anzahl von Deskriptoren an, die ein Prozess öffnen kann: #Arbeitsmodus und Obergrenze der Verbindungsnummer #Diese Anweisung bezieht sich auf die maximale Anzahl von Dateideskriptoren, die von einem nginx-Prozess geöffnet werden. Der theoretische Wert sollte die maximale Anzahl geöffneter Dateien (ulimit -n) geteilt durch die Anzahl der nginx-Prozesse sein, aber nginx verteilt Anforderungen nicht gleichmäßig, daher ist es am besten, den Wert von ulimit -n konsistent zu halten.
#Unter dem Linux 2.6-Kernel beträgt die Anzahl der geöffneten Dateien derzeit 65535, und worker_rlimit_nofile sollte dementsprechend mit 65535 ausgefüllt werden.
#Dies liegt daran, dass nginx während der Planung die Anforderungen nicht gleichmäßig auf die Prozesse verteilt. Wenn Sie also 10240 eingeben und die Gesamtparallelität 30.000-40.000 erreicht, kann es sein, dass mehr als 10240 Prozesse vorhanden sind, und es wird ein 502-Fehler zurückgegeben.
worker_rlimit_nofile 65535;


Veranstaltungen
{
 #Siehe Ereignismodell, verwenden Sie [kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll-Modell #ist ein Hochleistungs-Netzwerk-E/A-Modell im Linux-Kernel ab Version 2.6. Linux empfiehlt epoll. Verwenden Sie unter FreeBSD das kqueue-Modell.
 #Ergänzende Erklärung:
 #Ähnlich wie Apache hat nginx unterschiedliche Ereignismodelle für unterschiedliche Betriebssysteme. #A) Standardereignismodell #Select und Poll gehören zum Standardereignismodell. Wenn es im aktuellen System keine effektivere Methode gibt, wählt nginx Select oder Poll
 #B) Effizientes Ereignismodell #Kqueue: wird in FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 und MacOS X verwendet. Die Verwendung von kqueue auf MacOS X-Systemen mit zwei Prozessoren kann zu Kernel Panic führen.
 #Epoll: wird in Linux-Kernelversion 2.6 und späteren Systemen verwendet.
 #/dev/poll: wird unter Solaris 7 11/99+, HP/UX 11.22+ (Eventport), IRIX 6.5.15+ und Tru64 UNIX 5.1A+ verwendet.
 #Eventport: Wird in Solaris 10 verwendet. Um Kernel-Abstürze zu verhindern, ist die Installation von Sicherheitspatches notwendig.
 verwenden Sie epoll;

 #Maximale Anzahl von Verbindungen für einen einzelnen Prozess (maximale Anzahl von Verbindungen = Anzahl von Verbindungen * Anzahl von Prozessen)
 #Passen Sie es der Hardware an und verwenden Sie es in Verbindung mit dem vorherigen Arbeitsprozess. Machen Sie es so groß wie möglich, aber lassen Sie die CPU nicht zu 100 % laufen. Die maximale Anzahl an Verbindungen, die für jeden Prozess zulässig sind. Theoretisch beträgt die maximale Anzahl an Verbindungen für jeden Nginx-Server:
 Arbeiterverbindungen 65535;

 #keepalive-Zeitüberschreitung.
 KeepAlive-Timeout 60;

 #Die Puffergröße für Client-Anforderungsheader. Dies kann entsprechend der Seitengröße Ihres Systems eingestellt werden. Im Allgemeinen überschreitet die Größe eines Anforderungsheaders 1 KB nicht. Da das System-Paging jedoch im Allgemeinen größer als 1 KB ist, wird es hier auf die Seitengröße eingestellt.
 #Die Paging-Größe kann mit dem Befehl getconf PAGESIZE ermittelt werden.
 #[root@web001 ~]# getconf PAGESIZE
 #4096
 #Es gibt jedoch Fälle, in denen die client_header_buffer_size 4 KB überschreitet, der Wert der client_header_buffer_size jedoch auf ein ganzzahliges Vielfaches der „System-Paging-Größe“ eingestellt werden muss.
 Client-Header-Puffergröße 4k;

 #Hiermit wird der Cache für geöffnete Dateien festgelegt. Standardmäßig ist er nicht aktiviert. max gibt die Anzahl der Caches an. Es wird empfohlen, bei der Anzahl der geöffneten Dateien konsistent zu sein. inaktiv bezieht sich auf die Zeit, nach der der Cache gelöscht wird, wenn die Datei nicht angefordert wird.
 open_file_cache max=65535 inaktiv=60s;

 #Dies bezieht sich darauf, wie oft die zwischengespeicherten gültigen Informationen überprüft werden sollen.
 #Syntax: open_file_cache_valid Zeit Standardwert: open_file_cache_valid 60 Verwendete Felder: http, Server, Standort Diese Anweisung gibt an, wann die Gültigkeitsinformationen der Cache-Elemente in open_file_cache überprüft werden sollen.
 öffne_Dateicache_gültig 80 s;

 Die Mindesthäufigkeit, mit der eine Datei innerhalb der inaktiven Parameterzeit in der Direktive #open_file_cache verwendet wird. Wenn diese Zahl überschritten wird, wird der Dateideskriptor immer im Cache geöffnet. Wie im obigen Beispiel wird eine Datei entfernt, wenn sie innerhalb der inaktiven Zeit nicht einmal verwendet wird.
 #Syntax: open_file_cache_min_uses Zahl Standardwert: open_file_cache_min_uses 1 Verwendet in: http, Server, Standort Diese Direktive gibt in den Parametern der Direktive open_file_cache die Mindestanzahl von Dateien an, die innerhalb eines bestimmten Zeitbereichs verwendet werden können. Wenn ein größerer Wert verwendet wird, ist der Dateideskriptor immer im Cache geöffnet.
 Anzahl der Caches mit offenem Dateicache: 1;
 
 #Syntax: open_file_cache_errors on | off Standardwert: open_file_cache_errors off Verwendete Felder: http, Server, Standort Diese Anweisung gibt an, ob Cache-Fehler bei der Suche nach einer Datei protokolliert werden sollen.
 open_file_cache_errors ein;
}
 
 
 
#Richten Sie den HTTP-Server ein und nutzen Sie seine Reverse-Proxy-Funktion, um Lastausgleichsunterstützung für HTTP bereitzustellen
{
 #Dateierweiterungs- und Dateitypzuordnungstabelle enthält mime.types;

 #Standarddateityp Standardtyp Anwendung/Oktett-Stream;

 #Standardkodierung #Zeichensatz utf-8;

 #Größe der Hash-Tabelle für Servernamen#Die Hash-Tabelle, in der Servernamen gespeichert werden, wird durch die Anweisungen server_names_hash_max_size und server_names_hash_bucket_size gesteuert. Der Parameter Hash-Bucket-Größe entspricht immer der Größe der Hash-Tabelle und ist ein Vielfaches der Prozessor-Cache-Größe. Durch die Reduzierung der Anzahl der Zugriffe auf den Speicher ist es möglich, die Suche nach Hashtabellen-Schlüsselwerten im Prozessor zu beschleunigen. Wenn die Hash-Bucket-Größe gleich der Größe des Prozessor-Cache ist, dann beträgt bei der Suche nach einem Schlüssel die Anzahl der Speichersuchvorgänge im schlimmsten Fall 2. Das erste Mal muss die Adresse der Speichereinheit ermittelt werden, und das zweite Mal muss der Schlüsselwert in der Speichereinheit gefunden werden. Wenn Nginx Sie darauf hinweist, dass Sie die maximale Hash-Größe oder die Hash-Bucket-Größe erhöhen müssen, müssen Sie zunächst die Größe des ersteren Parameters erhöhen.
 Servernamen_Hash_Bucket_Größe 128;

 #Die Puffergröße für Client-Anforderungsheader. Dies kann entsprechend der Seitengröße Ihres Systems eingestellt werden. Im Allgemeinen überschreitet die Header-Größe einer Anfrage 1 KB nicht. Da das System-Paging jedoch im Allgemeinen größer als 1 KB ist, wird es hier auf die Seitengröße eingestellt. Die Paging-Größe kann mit dem Befehl getconf PAGESIZE ermittelt werden.
 Client-Header-Puffergröße 32k;

 #Größe des Client-Anforderungsheaderpuffers. Standardmäßig verwendet nginx den Puffer client_header_buffer_size, um den Header-Wert zu lesen. Wenn der Header zu groß ist, wird er über large_client_header_buffers gelesen.
 große_Client_Header_Puffer 4 64k;

 #Legen Sie die Größe der über Nginx hochgeladenen Dateien fest client_max_body_size 8m;

 #Effizienten Dateiübertragungsmodus aktivieren. Die Sendfile-Direktive gibt an, ob nginx die Sendfile-Funktion aufruft, um Dateien auszugeben. Für allgemeine Anwendungen ist sie aktiviert. Wenn sie zum Herunterladen und für andere Anwendungen mit hoher Festplatten-E/A-Last verwendet wird, kann sie deaktiviert werden, um die E/A-Verarbeitungsgeschwindigkeiten von Festplatte und Netzwerk auszugleichen und die Systemlast zu verringern. Hinweis: Wenn das Bild nicht richtig angezeigt wird, deaktivieren Sie diese Option.
 Die Direktive #sendfile gibt an, ob nginx die Sendfile-Funktion (Zero Copy-Modus) aufruft, um Dateien auszugeben. Für normale Anwendungen muss sie aktiviert sein. Wenn es für Anwendungen mit hoher Festplatten-E/A-Last, wie z. B. Herunterladen, verwendet wird, kann es deaktiviert werden, um die Verarbeitungsgeschwindigkeiten der Festplatten- und Netzwerk-E/A auszugleichen und die Systemverfügbarkeit zu verringern.
 sendfile an;

 # Verzeichnislistenzugriff aktivieren, geeignet zum Herunterladen von Servern, standardmäßig geschlossen.
 Autoindex aktiviert;

 #Diese Option erlaubt oder verbietet die Verwendung der TCP_CORK-Option von socke. Diese Option wird nur verwendet, wenn sendfile mit aktiviertem tcp_nopush verwendet wird.
  
 tcp_nodelay ein;

 #Langes Verbindungs-Timeout in Sekunden keepalive_timeout 120;

 #FastCGI-bezogene Parameter dienen der Verbesserung der Website-Leistung: Reduzierung der Ressourcennutzung und Erhöhung der Zugriffsgeschwindigkeit. Die nachfolgenden Parameter sind wörtlich zu verstehen.
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;

 #gzip-Moduleinstellungen gzip ein; #Gzip-Komprimierungsausgabe aktivieren gzip_min_length 1k; #minimale komprimierte Dateigröße gzip_buffers 4 16k; #Komprimierungspuffer gzip_http_version 1.0; #Komprimierungsversion (Standard 1.1, wenn das Frontend Squid2.5 ist, verwenden Sie bitte 1.0)
 gzip_comp_level 2;
 gzip_vary ein;

 #Wenn Sie die Anzahl der IP -Verbindungen einschränken, müssen Sie #Limit_zone Crawler $ BINARY_REMOTE_ADDR 10M verwenden;

 

 #Load Balancing Configuration Upstream jh.w3cschool.cn {
  
  #UpStream Lastausgleich, Gewicht ist das Gewicht, das gemäß der Maschinenkonfiguration definiert werden kann. Der Gewichtsparameter repräsentiert das Gewicht.
  Server 192.168.80.121:80 Gewicht = 3;
  Server 192.168.80.122:80 Gewicht = 2;
  Server 192.168.80.123:80 Gewicht = 3;

  #Nginx Upstream unterstützt derzeit 4 Arlokationsweisen Nr. 1, Umfragen (Standard)
  #Each Anfrage wird einem anderen Backend -Server in chronologischer Reihenfolge zugewiesen.
  #2.gewicht
  #Geben Sie die Wahlungswahrscheinlichkeit an.
  #Zum Beispiel:
  #Upstream Bakend
  # Server 192.168.0.14 Gewicht = 10;
  # Server 192.168.0.15 Gewicht = 10;
  #}
  #2, ip_hash
  #Each Anfrage wird gemäß dem Hash -Ergebnis der Zugriffs -IP zugewiesen, sodass jeder Besucher auf einen festen Backend -Server zugreift, der das Sitzungsproblem lösen kann.
  #Zum Beispiel:
  #Upstream Bakend
  #ip_hash;
  # Server 192.168.0.14:88;
  # Server 192.168.0.15:80;
  #}
  #3.
  #Allocation -Anfragen basierend auf der Antwortzeit des Backend -Servers, wobei die Anfragen mit kürzeren Antwortzeiten Priorität erhoben werden.
  #upstream Backend {
  # Server Server1;
  # Server Server2;
  # gerecht;
  #}
  #4.
  #Anteilungsanforderungen gemäß dem Hash -Ergebnis der aufgerufenen URL, sodass jede URL auf denselben Backend -Server gerichtet ist.
  #Example: Fügen Sie eine Hash -Anweisung in Upstream hinzu.
  # Server Squid1: 3128;
  # Server Squid2: 3128;
  # Hash $ request_uri;
  # Hash_Method CRC32;
  #}

  #Tips:
  #UpStream Bakend {#definiere den IP- und Gerätestatus des Lastausgleichsgeräts} {
  #ip_hash;
  # Server 127.0.0.1:9090 Down;
  # Server 127.0.0.1:8080 Gewicht = 2;
  # Server 127.0.0.1:6060;
  # Server 127.0.0.1:7070 Backup;
  #}
  #ADD Proxy_Pass http: // bakend/an den Server, der Lastausgleich verwenden muss;

  #Die Status jedes Geräts ist festgelegt auf:
  #1. Down bedeutet, dass der Server vor der Reihenfolge vorübergehend nicht an der Last beteiligt ist.
  #3.MAX_FAILS: Die Standardnummer der zulässigen Anforderungsfehler ist 1. Wenn die maximale Nummer überschritten wird, wird der durch das Modul proxy_next_upstream definierte Fehler zurückgegeben.
  #5.backup: Wenn alle anderen Nicht-Backup-Maschinen unten oder beschäftigt sind, fordern Sie den Sicherungsgerät an. Diese Maschine hat also den leichtesten Druck.

  #Nginx unterstützt das Einrichten mehrerer Gruppen von Lastausgleich gleichzeitig für die Verwendung von verschiedenen Servern.
  #client_body_in_file_only wird auf eingestellt, um die vom Client veröffentlichten Daten in eine Datei zum Debuggen aufzunehmen
  #Client_body_temp_path legt das Verzeichnis für die Aufzeichnung von Dateien fest.
  
  
  
 #Virtual Host Configuration Server
 {
  #Listen Port Hören Sie 80;

  #Sie können mehrere Domainnamen haben, die durch Spaces Server_Name www.w3cschool.cn w3cschool.cn;
  index.html index.htm index.php;
  root/data/www/w3cschool;

  #Load Balancing für ****** Ort ~.*. (Php | php5)? $
  {
   fastcgi_pass 127.0.0.1:9000;
   fastcgi_index index.php;
   fastcgi.conf einschließen;
  }
   
  #Image Cache -Zeiteinstellung Ort ~.*. (Gif | jpg | jpeg | png | bmp | swf) $
  {
   läuft in 10 Tagen ab;
  }
   
  #JS- und CSS -Cache -Zeiteinstellungsort ~.*. (JS | CSS)? $
  {
   läuft in 1 Stunde ab;
  }
   
  #Log -Formateinstellungen#$ remote_addr und $ http_x_forwarded_for werden verwendet, um die IP -Adresse des Clients aufzuzeichnen.
  #$ remote_user: Wird verwendet, um den Client -Benutzernamen aufzuzeichnen.
  #$ time_local: Wird verwendet, um Zugriffszeit und Zeitzone aufzuzeichnen;
  #$ Anfrage: Wird zum Aufzeichnen des angeforderten URL- und HTTP -Protokolls verwendet;
  #$ status: verwendet, um den Anforderungsstatus aufzuzeichnen;
  #$ Body_Bytes_St: Aufzeichnet die Größe des an den Client gesendeten Dateigremiums;
  #$ http_referer: Wird verwendet, um den Seitenlink aufzuzeichnen, aus dem der Besuch kam;
  #$ http_user_agent: zeichnet die relevanten Informationen des Client -Browsers auf;
  #Der Webserver wird auf den Reverse -Proxy aufgestellt, sodass die IP -Adresse des Clients nicht erhalten wird. Der Reverse -Proxy -Server kann in den HTTP -Headerinformationen der angegebenen Anforderung die IP -Adresse des ursprünglichen Clients und die vom ursprünglichen Client angeforderte Serveradresse x_forwarded_for Informationen hinzufügen.
  log_format access '$ remote_addr - $ remote_user [$ time_local] "$ request"' '
  '$status $body_bytes_sent "$http_referer" '
  '"$ http_user_agent" $ http_x_forwarded_for';
   
  #Definieren Sie das Zugriffsprotokoll dieses virtuellen Hosts Access_log /usr/local/nginx/logs/host.access.log main;
  access_log /usr/local/nginx/logs/host.access.404.log log404;
   
  # Reverse Proxy für " /" -Position / {aktivieren
   proxy_pass http://127.0.0.1:88;
   Proxy_Redirect aus;
   Proxy_Set_Header X-Real-IP $Remote_Addr;
    
   #Der Backend-Webserver kann die echte IP des Benutzers über X-Forwarded-For erhalten
   proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
    
   #Nachfolgend sind einige optionale Reverse-Proxy-Konfigurationen aufgeführt.
   Proxy_Set_Header Host $host;

   #Die maximale Anzahl von Bytes einer einzelnen Datei, die vom Client_MAX_BODY_SIZE 10M angefordert werden darf;

   #Die maximale Anzahl von Bytes, die der Puffer -Proxy für Clientanfragen puffert,
   #Wenn Sie es auf einen relativ großen Wert einstellen, z. B. 256K, dann ist es normal, ob Sie Firefox oder IE -Browser verwenden, um ein Bild zu senden, das kleiner als 256.000 ist. Wenn Sie diese Anweisung kommentieren und die Standardeinstellung client_body_buffer_size verwenden, die doppelt so hoch ist wie die Größe von 8K oder 16K, wird das Problem auftreten.
   #Wenn mit Firefox 4.0 oder IE 8.0 ein relativ großes Bild von etwa 200K eingereicht wird, gibt es einen 500 internen Serverfehler -Fehler Client_body_buffer_size 128K zurück;

   # bedeutet, Nginx -Block -HTTP -Antwortcodes von 400 oder höher zu machen.
   proxy_intercept_errors ein;

   #Backend Server Connection Timeout_initiate Handshake und Warten auf die Antwort Timeout #nginx stellt eine Verbindung zum Backend Server Timeout (Proxy Connection Timeout) her.
   Proxy_Verbindungstimeout 90;

   #Backend Server -Datenübertragungszeit (Proxy -Senden von Zeitlimiten)
   #Die Backend Server -Datenübertragungszeit ist die Zeit, in der der Backend -Server alle Daten proxy_send_timeout 90 übertragen muss.

   #Nachdem die Verbindung erfolgreich ist, die Backend Server -Antwortzeit (Proxy -Empfangszeitüberschreitung)
   #Nachdem die Verbindung erfolgreich ist, dass der Backend -Server die Reaktion auf die Tatsache reagiert, hat sie die Warteschlange der Backend -Warteschlange eingegeben (sie kann auch als die Zeit für den Backend -Server benötigt werden, um die Anfrage zu verarbeiten)
   Proxy_Lese_Timeout 90;

   #SETTEN SIE DER GROSE DER PUFFER VON DER PROXY SERVER (NGINX), um Benutzer -Header -Informationen zu speichern.

   #Proxy_Buffer -Puffer, die durchschnittliche Webseite ist unter 32K #Set die Anzahl und Größe der Puffer, die zum Lesen von Antworten verwendet werden (vom Proxied -Server).
   Proxy-Puffer 4 32k;

   #Buffer Größe unter hoher Last (Proxy_Buffer*2)
   Proxy_Busy_Buffer_Größe 64k;

   #Die Größe der Daten beim Schreiben in proxy_temp_path, um zu verhindern, dass ein Arbeitsprozess zu lange blockiert wird, wenn die Dateien die Größe des Cache -Ordners übertragen werden.
  }
   
   
  #Setzen Sie die Adresse zum Anzeigen von Nginx -Statusspeicherort /nginxstatus {
   stub_status ein;
   Access_log on;
   auth_basic "nginxstatus";
   auth_basic_user_file confpasswd;
   #Der Inhalt der HTPassWD -Datei kann mit dem von Apache bereitgestellten HTPasswd -Tool generiert werden.
  }
   
  #LOCAL Dynamic und statische Separation Reverse Proxy -Konfiguration #all JSP -Seiten werden von Tomcat oder Harzort ~. (JSP | JSPX | DO)?
   Proxy_Set_Header Host $host;
   Proxy_Set_Header X-Real-IP $Remote_Addr;
   proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
   Proxy-Passwort http://127.0.0.1:8080;
  }
   
  #All statische Dateien werden direkt von Nginx gelesen, ohne durch Tomcat oder Harz zu gehen
  Ort ~.*. (htm | html | gif | jpg | jpeg | png | bmp | swf | ioc | rar | zip | txt | flv | mid | doc | ppt |
  PDF | XLS | MP3 | WMA) $
  {
   läuft 15d ab; 
  }
   
  Ort ~.*. (JS | CSS)? $
  {
   läuft in 1 Stunde ab;
  }
 }
}
###### Detaillierte Erläuterung der Nginx -Konfigurationsdatei nginx.conf in Chinesisch ######

Siehe#

"Detaillierte Erläuterung von Nginx Hochleistungs-Webserver" Miao ZE Electronic Industry Press
Kann die offizielle NGINX -Website -Betriebssystem Millionen von Verbindungen unterstützen?
Nginx -Serie -Blog
nginx default_server Definition und Übereinstimmungsregeln
W3C Nginx Tutorial

Dies ist das Ende dieses Artikels zur detaillierten Erläuterung der NGINX -Konfigurationsdatei.

Das könnte Sie auch interessieren:
  • Chinesische Kommentare zur Nginx-Konfigurationsdatei nginx.conf
  • Teilen Sie die Konfigurationsdateien mit dem Ausführen von PHP Framework Laravel in Nginx frei
  • Der Reverse-Proxy-Dienst von Nginx verursacht beim Zugriff auf Ressourcen aufgrund eines Fehlers in der Konfigurationsdatei einen 404-Fehler
  • Detaillierte Erklärung der Nginx-Konfigurationsdatei auf Chinesisch
  • Allgemeine Konfigurationsmethoden der Nginx-Konfigurationsdatei nginx.conf
  • Detaillierte Beschreibung der Nginx-Konfigurationsdatei nginx.conf
  • Vollständige Analyse der Nginx-Serverkonfigurationsdatei
  • Einführung in die Nginx-Konfiguration und Konfigurationsdateien unter Windows
  • Einführung in die Organisationsstruktur von Nginx+PHP-FPM-Konfigurationsdateien
  • Detaillierte Erklärung der Konfigurationsdatei nginx.conf im Nginx-Server
  • Konfigurationsdetails der Nginx-Konfigurationsdatei (nginx.conf) (Zusammenfassung)

<<:  Detailliertes Tutorial zum Herunterladen, Installieren und Konfigurieren der neuesten Version von MySQL 8.0.21

>>:  Detaillierte Erklärung zum Ziehen von Tabellenspalten mit Vue Element Sortablejs

Artikel empfehlen

js Implementierung des Verifizierungscode-Falls

In diesem Artikelbeispiel wird der spezifische Co...

Erläuterung des MySQL-Abfragebeispiels anhand instanziierter Objektparameter

Dieser Artikel stellt vor, wie Sie durch Instanzi...

Vergleich der Leistung von int, char und varchar in MySQL

Im Internet kursieren viele scheinbar wahre „Gerü...

Löschvorgang für Docker-Volumes

prune Um diesen Befehl verwenden zu können, müsse...

Erfahren Sie mehr über den MySQL-Ausführungsplan

Inhaltsverzeichnis 1. Einführung in den Implement...

Einige Indikatoren für exzellentes Web-Frontend-Design

Die Barrierefreiheit von Webseiten scheint etwas z...

Vue implementiert das Senden von Emoticons im Chatfenster

Der spezifische Code zum Senden von Emoticons im ...

Detaillierte Analyse des Reaktionsprinzips und der bidirektionalen Daten von Vue

Verstehen von object.defineProperty, um Reaktions...

Detaillierte Erläuterung der Docker Swarm-Dienstorchestrierungsbefehle

1. Einleitung Docker verfügt über ein Orchestrier...

Detaillierte Erklärung des virtuellen DOM und des Diff-Algorithmus in React

Die Rolle des virtuellen DOM Zunächst müssen wir ...