PS: Ich habe kürzlich das Nginx-Kapitel von <<Praxis zum Aufbau eines leistungsstarken Linux-Servers>> gelesen, in dem Nginx sehr ausführlich vorgestellt wird. Ich habe die chinesischen Auszüge der häufig verwendeten Nginx-Konfigurationsparameter und meine echte Demonstration des Nginx-Lastausgleichs zur späteren Überprüfung abgeschrieben! Detaillierte Beschreibung der Nginx-Konfigurationsparameter auf Chinesisch #Definieren Sie den Benutzer und die Benutzergruppe, die Nginx ausführt Benutzer www www; # #Anzahl der Nginx-Prozesse, es wird empfohlen, sie gleich der Gesamtzahl der CPU-Kerne zu setzen. Arbeitsprozesse 8; # #Globaler Fehlerprotokolldefinitionstyp, [ debug | info | notice | warn | error | crit ] Fehlerprotokoll /var/log/nginx/error.log Info; # #Datei verarbeiten pid /var/run/nginx.pid; # #Die maximale Anzahl von Dateideskriptoren, die von einem nginx-Prozess geöffnet werden. Der theoretische Wert sollte die maximale Anzahl geöffneter Dateien (der Systemwert ulimit -n) geteilt durch die Anzahl der nginx-Prozesse sein. nginx verteilt Anfragen jedoch ungleichmäßig, daher wird empfohlen, den Wert von ulimit -n konsistent zu halten. worker_rlimit_nofile 65535; # #Arbeitsmodus und Obergrenze der Verbindungsanzahl Veranstaltungen { #Beziehen Sie sich auf das Ereignismodell, verwenden Sie [kqueue | rtsig | epoll | /dev/poll | select | poll]; das epoll-Modell ist ein Hochleistungs-Netzwerk-E/A-Modell im Linux-Kernel ab Version 2.6. Verwenden Sie bei der Ausführung unter FreeBSD das kqueue-Modell. verwenden Sie epoll; #Maximale Anzahl von Verbindungen für einen einzelnen Prozess (maximale Anzahl von Verbindungen = Anzahl von Verbindungen * Anzahl von Prozessen) Arbeiterverbindungen 65535; } # #Richten Sie den HTTP-Server ein http { include mime.types; #Dateierweiterungs- und Dateityp-Zuordnungstabelle default_type application/octet-stream; #Standarddateityp #Zeichensatz utf-8; #Standardkodierung server_names_hash_bucket_size 128; #Größe der Hash-Tabelle des Servernamens client_header_buffer_size 32k; #Upload-Dateigrößenlimit large_client_header_buffers 4 64k; #Anforderungspuffer festlegen client_max_body_size 8m; #Anforderungspuffer festlegen # #Offener Verzeichnislistenzugriff, geeignet zum Herunterladen von Servern, standardmäßig geschlossen. autoindex on; #Verzeichnis anzeigen autoindex_exact_size on; #Dateigröße anzeigen. Standardmäßig ist es eingeschaltet und zeigt die genaue Größe der Datei in Bytes an. Nach dem Ausschalten wird die ungefähre Größe der Datei in kB, MB oder GB angezeigt. autoindex_localtime on; #Dateizeit anzeigen. Standardmäßig ist die angezeigte Dateizeit deaktiviert und die angezeigte Dateizeit ist GMT-Zeit. Nach dem Ändern auf „Ein“ ist die angezeigte Dateizeit die Serverzeit der Datei. # sendfile on; #Effizienten Dateiübertragungsmodus aktivieren. Die Anweisung sendfile gibt an, ob nginx die Funktion sendfile aufruft, um Dateien auszugeben. Für allgemeine Anwendungen ist sie auf „on“ eingestellt. Wenn sie zum Herunterladen und für andere Anwendungen mit hoher Festplatten-E/A-Last verwendet wird, kann sie auf „off“ eingestellt werden, um die E/A-Verarbeitungsgeschwindigkeiten von Festplatte und Netzwerk auszugleichen und die Systemlast zu verringern. Hinweis: Wenn die Bildanzeige nicht normal ist, ändern Sie dies auf „off“. tcp_nopush on; #Netzwerküberlastung verhindern tcp_nodelay on; #Netzwerküberlastung verhindern # keepalive_timeout 120; #(Einheit: s) Legen Sie die Zeitüberschreitung fest, während der die Clientverbindung aktiv bleibt. Nach Ablauf dieser Zeit schließt der Server die Verbindung. # Mit #FastCGI verbundene Parameter dienen der Verbesserung der Leistung der Website: Sie reduzieren die Ressourcennutzung und erhöhen die Zugriffsgeschwindigkeit. Die folgenden Parameter können verstanden werden, wenn man sich die wörtliche Bedeutung ansieht. 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 on; # Gzip-Komprimierungsausgabe aktivieren gzip_min_length 1k; #Die für komprimierte Seiten zulässige Mindestanzahl an Bytes. Die Anzahl der Bytes für eine Seite ergibt sich aus der Inhaltslänge im Header. Der Standardwert ist 0, was bedeutet, dass die Seite unabhängig von ihrer Größe komprimiert wird. Es wird empfohlen, den Wert auf eine Anzahl von Bytes größer als 1k einzustellen. Wenn er kleiner als 1k ist, kann die Seite immer größer werden. gzip_buffers 4 16k; #Gibt an, dass 4 Einheiten mit 16 KB Speicher als Stream-Cache für das Komprimierungsergebnis beantragt werden. Der Standardwert besteht darin, denselben Speicherplatz wie die ursprüngliche Datengröße zum Speichern des Gzip-Komprimierungsergebnisses zu beantragen. gzip_http_version 1.1; #Komprimierungsversion (Standard 1.1, die meisten Browser unterstützen derzeit die Gzip-Dekomprimierung. Wenn das Front-End Squid2.5 ist, verwenden Sie bitte 1.0) gzip_comp_level 2; #Komprimierungsstufe. 1 hat die kleinste Komprimierungsrate und die schnellste Verarbeitungsgeschwindigkeit. 9 hat die größte Komprimierungsrate, verbraucht mehr CPU-Ressourcen und hat die langsamste Verarbeitungsgeschwindigkeit, aber da die Komprimierungsrate am größten ist, ist die Paketgröße am kleinsten und die Übertragungsgeschwindigkeit am schnellsten. gzip_types Text/einfache Anwendung/x-Javascript-Text/CSS-Anwendung/Xml; #Komprimierungstyp, standardmäßig enthält er bereits Text/HTML, Sie müssen ihn also nicht weiter unten schreiben. Es wird kein Problem geben, wenn Sie ihn schreiben, aber es wird eine Warnung angezeigt. Mit der Option gzip_vary on;# kann der Front-End-Cache-Server gzip-komprimierte Seiten zwischenspeichern. Beispiel: Verwenden Sie Squid, um von nginx komprimierte Daten zwischenzuspeichern. # #Wird benötigt, um die Anzahl der IP-Verbindungen zu begrenzen #limit_zone-Crawler $binary_remote_addr 10m; # ##Upstream-Lastausgleich, vier Planungsalgorithmen (das folgende Beispiel ist die Hauptvorlesung)## # #Virtuelle Hostkonfiguration Server { #Abhörport hören Sie 80; #Sie können mehrere Domänennamen haben, getrennt durch Leerzeichen Servername wangying.sinaapp.com; index.html index.htm index.php; Wurzel /data/www/; Standort ~ .*\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi.conf einschließen; } #Bild-Cache-Zeiteinstellung Standort ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { läuft in 10 Tagen ab; } #JS- und CSS-Cache-Zeiteinstellungen Standort ~ .*\.(js|css)?$ { läuft in 1 Stunde ab; } #Protokollformateinstellungen log_format Zugriff '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for'; #Definieren Sie das Zugriffsprotokoll für diesen virtuellen Host access_log /var/log/nginx/access.log Zugriff; # #Legen Sie die Adresse fest, um den Nginx-Status anzuzeigen. Das StubStatus-Modul kann den Arbeitsstatus von Nginx seit dem letzten Start abrufen. Dieses Modul ist kein Kernmodul und muss manuell angegeben werden, wenn Nginx kompiliert und installiert wird, bevor es verwendet werden kann Standort /NginxStatus { stub_status ein; access_log an; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; #Der Inhalt der htpasswd-Datei kann mit dem von Apache bereitgestellten htpasswd-Tool generiert werden. } } }
Mehrere Nginx-Server zur Realisierung des Lastenausgleichs Nginx-Lastausgleichsserver: IP-Adresse: 192.168.1.1 Webserverliste: Web1:192.168.1.2 Web2:192.168.1.3 Zweck: Wenn Benutzer auf den Server 192.168.1.1 zugreifen, wird ihre Last über Nginx auf die Server Web1 und Web2 verteilt.
http
{
##Upstream-Lastausgleich, vier Planungsalgorithmen##
#Planungsalgorithmus 1: Polling. Jede Anfrage wird in chronologischer Reihenfolge nacheinander an verschiedene Backend-Server zugewiesen. Wenn ein Backend-Server ausfällt, wird das fehlerhafte System automatisch entfernt, sodass der Benutzerzugriff nicht beeinträchtigt wird. Upstream-Webhost {
Server 192.168.1.2:80;
Server 192.168.1.3:80;
}
#Planungsalgorithmus 2: Gewicht. Sie können Gewichte basierend auf der Maschinenkonfiguration definieren. Je höher das Gewicht, desto größer ist die Wahrscheinlichkeit einer Zuweisung. Upstream-Webhost {
Server 192.168.1.2:80 Gewicht=2;
Server 192.168.1.3:80 Gewicht=3;
}
#Planungsalgorithmus 3: ip_hash. Jede Anforderung wird entsprechend dem Hash-Ergebnis der Zugriffs-IP zugewiesen, sodass Besucher mit derselben IP auf einen festen Backend-Server zugreifen, wodurch das Problem der Sitzungsfreigabe dynamischer Webseiten beim Upstream-Webhost effektiv gelöst wird {
ip_hash;
Server 192.168.1.2:80;
Server 192.168.1.3:80;
}
#Planungsalgorithmus 4: url_hash (muss ein Plug-In eines Drittanbieters installieren). Diese Methode verteilt Anfragen entsprechend dem Hash-Ergebnis der aufgerufenen URL, sodass jede URL an denselben Backend-Server weitergeleitet wird, was die Effizienz des Backend-Cache-Servers weiter verbessern kann. Nginx selbst unterstützt url_hash nicht. Wenn Sie diesen Planungsalgorithmus verwenden müssen, müssen Sie das Nginx-Hash-Paket Upstream Webhost { installieren.
Server 192.168.1.2:80;
Server 192.168.1.3:80;
Hashwert für $request_uri;
}
#Planungsalgorithmus 5: fair (muss ein Plug-In eines Drittanbieters installieren). Dies ist ein intelligenterer Lastausgleichsalgorithmus als die beiden oben genannten. Dieser Algorithmus kann die Last basierend auf der Seitengröße und der Ladezeit intelligent ausgleichen, d. h. er weist Anforderungen basierend auf der Antwortzeit des Backend-Servers zu und priorisiert Anforderungen mit kürzerer Antwortzeit. Nginx selbst unterstützt Fair nicht. Wenn Sie diesen Planungsalgorithmus verwenden müssen, müssen Sie das Modul upstream_fair von Nginx herunterladen.
#Konfiguration des virtuellen Hosts (mit Planungsalgorithmus 3: ip_hash)
Server
{
hören Sie 80;
Servername wangying.sinaapp.com;
# Reverse-Proxy für den Standort "/" aktivieren / {
Proxy-Passwort http://Webhost;
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;
client_max_body_size 10m; #Die maximale Anzahl an Bytes einer einzelnen Datei, die vom Client angefordert werden darf client_body_buffer_size 128k; #Die maximale Anzahl an Bytes, die der Pufferproxy für Clientanforderungen puffern kann,
proxy_connect_timeout 90; #Nginx-Verbindungstimeout mit dem Backend-Server (Proxy-Verbindungstimeout)
proxy_send_timeout 90; #Datenrückgabezeit des Backend-Servers (Proxy-Sende-Timeout)
proxy_read_timeout 90; #Nach erfolgreicher Verbindung die Antwortzeit des Backend-Servers (Proxy-Empfangs-Timeout)
proxy_buffer_size 4k; #Puffergröße des Proxyservers (nginx) zum Speichern von Benutzerheaderinformationen festlegen proxy_buffers 4 32k; #proxy_buffers-Puffer, die durchschnittliche Webseite ist auf unter 32k eingestellt proxy_busy_buffers_size 64k; #Puffergröße bei hoher Belastung (proxy_buffers*2)
Proxy_Temp_File_Schreibgröße 64k;
#Legen Sie die Größe des Cache-Ordners fest. Wenn sie größer als dieser Wert ist, wird sie vom Upstream-Server übertragen.
}
} Testdomänenname: wangying.sinaapp.com Aufgelöst auf 192.168.1.1 bzw. Wenn Kunden diese drei Sites besuchen, gleicht Nginx die Last anhand des vom Kunden besuchten IP-Hash-Werts auf die Konfiguration der virtuellen Hosts auf den Servern Web1 und Web2 aus. Ein lokaler Einzelserver implementiert eine dynamische und statische Trennung der Multi-Port-Reverse-Proxy-Konfiguration Nginx-Lastausgleichsserver: IP-Adresse: 192.168.1.1:80 Liste der Webserver (auf derselben Maschine): Web1:192.168.1.1:8080 Web1:192.168.1.1:8081 Web1:192.168.1.1:8082 Leistungszweck: Der Benutzer besucht http://wangying.sinaapp.com, dessen Lastausgleich auf die Ports 8080, 8081 und 8082 des lokalen Servers erfolgt.
http
{
#Da die Serverlast auf die lokalen Ports 8080, 8081 und 8082 verteilt ist, sollten die lokalen Ports 8080, 8081 und 8082 für den Skript-Parsing-Server geöffnet werden {
hören Sie 8080;
Servername wangying.sinaapp.com;
Stammverzeichnis /mnt/hgfs/vmhtdocs/fastdfs/;
Standort ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
fastcgi_params einschließen;
}
#Wie wir vom Port 80 unten wissen, sind 8080, 8081 und 8082 nur für die dynamische Programmanalyse von PHP verantwortlich, es besteht daher keine Notwendigkeit, eine statische Dateikonfiguration festzulegen.}
Server {
hören Sie 8081;
Servername wangying.sinaapp.com;
Stammverzeichnis /mnt/hgfs/vmhtdocs/fastdfs/;
index.php index.html index.htm;
Standort ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $Dokumentstammsatz$fastcgi_script_name;
fastcgi_params einschließen;
}
}
#8082 kann der obigen Serverkonfiguration folgen und einfach die Listen-Funktion ändern#
#Lokale Multi-Port-Load-Balancing-Konfiguration#
#Da es sich um einen Server handelt, können Sie 127.0.0.1 anstelle der Intranet-IP verwenden
#Der Hostname nach Upstream ist nur ein Bezeichner. Es kann ein Wort oder ein Domänenname sein. Es kann dasselbe sein wie Proxy_Pass http://webhost upstream webhost {
Server 127.0.0.1:8080;
Server 127.0.0.1:8081;
Server 127.0.0.1:8082;
}
#Lokaler Port 80, der Anfragen als Lastenausgleichsserver akzeptiert
{
hören Sie 80;
Servername wangying.sinaapp.com;
#Lokale dynamische und statische Trennung der Reverse-Proxy-Konfiguration #Alle PHP-Seiten werden vom lokalen Fastcgi-Standort verwaltet ~ \.php$ {
Proxy-Passwort http://Webhost;
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;
}
#Alle statischen Dateien werden direkt von nginx gelesen. #Speicherort der Zeiteinstellung für den Bildcache ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
läuft in 10 Tagen ab;
}
#Speicherort der JS- und CSS-Cache-Zeiteinstellung ~ .*\.(js|css)?$ {
läuft in 1 Stunde ab;
}
} Nachfolgend finden Sie Ergänzungen von anderen Internetnutzern 1. Hauptkonfigurationsbereich 1. Notwendige Konfiguration für den Normalbetrieb #Laufender Benutzer und Gruppe, Gruppenidentität kann weggelassen werden Benutzer nginx nginx; #Geben Sie die PID-Datei des Nginx-Daemon-Prozesses an pid-Pfad/zu/nginx.pid; #Geben Sie die maximale Anzahl von Dateihandles an, die alle Arbeitsprozesse öffnen können worker_rlimit_nofile 100000; 2. Konfiguration im Zusammenhang mit der Leistungsoptimierung #Die Anzahl der Arbeitsprozesse sollte normalerweise etwas geringer sein als die Anzahl der physischen CPU-Kerne. Sie können auch auto verwenden, um automatisch zu erhalten Arbeiterprozesse automatisch; #CPU-Affinitätsbindung (CPU-Kontextwechsel sind ebenfalls unvermeidlich) #Vorteile: Verbesserung der Cache-Trefferquote #Kontextwechsel: verursacht unnötige CPU-Auslastung #http://blog.chinaunix.net/uid-20662363-id-2953741.html work_cpu_affinity 00000001 00000010 00000100 00001000 000100000 001000000 01000000 10000000; #Timer-Auflösung (nachdem die Anforderung nginx erreicht hat, antwortet nginx auf die Benutzeranforderung. Es muss die Systemzeit abrufen und im Protokoll aufzeichnen. Bei hoher Parallelität kann die Zeit mehrmals pro Sekunde abgerufen werden.) #Das Verringern dieses Wertes kann die Anzahl der gettimeofday()-Systemaufrufe reduzieren Timer-Auflösung 100 ms; #Gibt den Nice-Wert des Arbeitsprozesses an: Je kleiner die Zahl, desto höher die Priorität #nice-Wertebereich: -20,19 #Entsprechende Priorität: 100, 139 Arbeiterprioritätsnummer; 2. Ereignisbezogene Konfiguration Ereignisse { #Die Lastausgleichssperre, die verwendet wird, wenn der Master Benutzeranforderungen an einen Arbeitsprozess weiterleitet: Ein bedeutet, dass mehrere Arbeiter nacheinander und in serialisierter Weise auf neue Anforderungen reagieren können. accept_mutex {aus|ein}
#Verzögerungswartezeit, der Standardwert beträgt 500 ms accept_mutex_delay-Zeit;
#Accept_mutex verwendeter Sperrdateipfad lock_file-Datei;
#Geben Sie das zu verwendende Zeitmodell an: Es wird empfohlen, es von Nginx auswählen zu lassen verwenden Sie [epoll|rtsig|select|poll];
#Die maximale Anzahl gleichzeitiger Verbindungen, die von einem einzelnen Arbeitsprozess geöffnet werden, worker_processes*worker_connections Arbeiterverbindungen 2048;
#Sagen Sie nginx, dass es nach Erhalt einer neuen Verbindungsbenachrichtigung so viele Verbindungen wie möglich akzeptieren soll multi_accept ein; } 3. Wird zum Debuggen und Lokalisieren von Problemen verwendet #Ob nginx als Daemon-Prozess ausgeführt werden soll; sollte zum Debuggen deaktiviert werden Daemon {an|aus} #Ob im Master-/Worker-Modus ausgeführt werden soll; kann während des Debuggens auf „Aus“ gesetzt werden master_process {an|aus} #error_log-Standortebene. Wenn Sie Debug verwenden möchten, müssen Sie beim Kompilieren von nginx die Option --with-debug verwenden error_log-Datei | stderr | syslog:server=Adresse[,parameter=Wert] | Speicher:Größe [debug|info|hinweis|warnen|fehler|krit|alarm|notfall]; Zusammenfassung: Parameter, die oft angepasst werden müssen: worker_processes, worker_connections, worker_cpu_affinity, worker_priority Neue Konfigurationsänderungen werden wirksam: nginx -s reload Andere Parameter stop, quit, reopen können auch mit nginx -h angezeigt werden 4. Konfiguration von nginx als Webserver http {}: Vom Modul ngx_http_core_module eingeführtes Konfigurationsframework: http { stromaufwärts ... } Server { Standort-URL { root "/Pfad/zu/somedir" ... }#Ähnlich wie <Location> in httpd, wird verwendet, um die Zuordnungsbeziehung zwischen URL und lokalem Dateisystem zu definieren Standort-URL { Wenn ... { ... } } }#Jeder Server ist ähnlich einem <VirtualHost> in httpd Server { ... } } Hinweis: http-bezogene Anweisungen können nur in den Kontexten http, Server, Location, Upstream und if verwendet werden, einige Anweisungen gelten jedoch nur für bestimmte dieser fünf Kontexte. http { #Schalten Sie die Nginx-Versionsnummer auf der Fehlerseite ein oder aus Server-Tokens ein; #!server_tag ein; #!server_info ein;
#Optimieren Sie die Festplatten-E/A-Einstellungen, geben Sie an, ob nginx die Sendfile-Funktion zum Ausgeben von Dateien aufruft, aktivieren Sie sie für allgemeine Anwendungen und deaktivieren Sie sie für Anwendungen mit hoher Festplatten-E/A wie Downloads sendfile an; #Stellen Sie nginx so ein, dass alle Header in einem Paket gesendet werden, anstatt einzeln tcp_nopush ein; #Stellen Sie nginx so ein, dass Daten nicht zwischengespeichert, sondern stückweise gesendet werden.
#Das Timeout für lange Verbindungen beträgt standardmäßig 75 Sekunden KeepAlive-Timeout 30; #Die maximale Anzahl an Ressourcen, die in einer langen Verbindung angefordert werden können Keepalive-Anfragen 20; #Permanente Verbindungen für einen bestimmten User-Agent-Typ deaktivieren keepalive_disable [msie6|safari|keine]; #Ob die Option TCP_NODELAY für lange Verbindungen verwendet werden soll und nicht mehrere kleine Dateien für die Übertragung kombiniert werden sollen tcp_nodelay ein; #Lesen Sie das Timeout für den HTTP-Anforderungsheader client_header_timeout #; #Timeout für das Lesen des Hauptteils der HTTP-Anforderungsnachricht Client_Body_Timeout #; #Timeout für das Senden der Antwortnachricht Sendezeitüberschreitung #;
#Legen Sie die Parameter des gemeinsam genutzten Speichers fest, in dem Benutzer verschiedene Schlüssel speichern. 5 m bedeutet 5 Megabyte Verbindungslimitzone $binary_remote_addr Zone=Adresse:5m; #Legen Sie die maximale Anzahl von Verbindungen für einen bestimmten Schlüssel fest. Hier ist der Schlüssel addr und der Wert ist 100, was bedeutet, dass jede IP-Adresse gleichzeitig bis zu 100 Verbindungen öffnen darf. limit_conn Adresse 100; #include bedeutet, den Inhalt einer anderen Datei in die aktuelle Datei einzuschließen mime.types einschließen; #Stellen Sie die Datei so ein, dass der Standard-Minentyp verwendet wird Standardtyp Text/HTML; #Legen Sie den Standardzeichensatz fest Zeichensatz UTF-8; #Stellen Sie nginx so ein, dass die Daten in Form einer GZIP-Komprimierung gesendet werden, um die gesendete Datenmenge zu reduzieren. Dies erhöht jedoch die Anforderungsverarbeitungszeit und die CPU-Verarbeitungszeit, was abgewogen werden muss gzip an; #Fügen Sie dem Proxyserver eine Variable hinzu. Einige Browser unterstützen Komprimierung, andere nicht. Bestimmen Sie anhand des HTTP-Headers des Clients, ob Komprimierung erforderlich ist. gzip_vary ein; #Bevor Ressourcen komprimiert werden, prüft nginx zunächst, ob Ressourcen vorhanden sind, die bereits mit gzippt wurden. #!gzip_static ein; #Deaktivieren Sie gzip für den angegebenen Client gzip_disable "MSIE[1-6]\."; # Komprimierung basierend auf der Anfrage und dem entsprechenden Antwortstrom zulassen oder deaktivieren. „Any“ bedeutet, dass alle Anfragen komprimiert werden. gzip_proxied beliebig; #Legen Sie die Mindestanzahl von Bytes fest, um die Komprimierung der Daten zu aktivieren. Wenn die Anforderung weniger als 10240 Bytes umfasst, wird sie nicht komprimiert, was sich auf die Anforderungsgeschwindigkeit auswirkt gzip_min_länge 10240; #Stellen Sie die Datenkomprimierungsstufe zwischen 1 und 9 ein, wobei 9 die langsamste ist und die höchste Komprimierungsrate hat gzip_comp_level 2; #Legen Sie das zu komprimierende Datenformat fest gzip_types Text/Klartext/CSS-Text/XML-Text/Javascript-Anwendung/JSON-Anwendung/X-Javascript-Anwendung/XML-Anwendung/XML+RSS; #Beim Aufbau des Caches wird auch die maximale Anzahl zwischengespeicherter Dateien angegeben. Wenn innerhalb von 20 Sekunden keine Anforderung für eine Datei erfolgt, wird der Cache gelöscht. open_file_cache max=100000 inaktiv=20s;
#Gibt an, wie oft die zwischengespeicherten gültigen Informationen überprüft werden sollen öffne_Dateicache_gültig 60 s;
#Die Mindestanzahl der Zugriffe auf den Dateicache. Nur Dateien, auf die mehr als 5 Mal zugegriffen wird, werden zwischengespeichert. Anzahl der Caches pro Tag: 5;
#Ob Fehlermeldungen bei der Suche nach einer Datei zwischengespeichert werden sollen open_file_cache_errors ein; #Die maximale Anzahl an Bytes pro Datei, die vom Client angefordert werden dürfen maximale Körpergröße des Kunden: 8 m;
#Die maximale Anzahl an Bytes, die der Pufferzonen-Proxy für Client-Anfragen puffert Client-Header-Puffergröße 32k;
#Referenzieren Sie alle Konfigurationsdateien unter /etc/nginx/vhosts. Wenn es viele Hostnamen gibt, können Sie für jeden Hostnamen eine Datei erstellen, um die Verwaltung zu erleichtern schließen Sie /etc/nginx/vhosts/* ein; } 5. Modul „Virtuelle Hosteinstellungen“ #Liste der Lastausgleichsserver (normalerweise konfiguriere ich die Lastausgleichskategorie in der Konfigurationsdatei des entsprechenden virtuellen Hosts) Upstream-Fansik #Zugriffsregeln für Backend-Server ip_hash; #Der Gewichtsparameter stellt den Gewichtswert dar. Je höher das Gewicht, desto größer die Wahrscheinlichkeit einer Zuweisung. Server 192.168.1.101:8081 Gewicht=5; Server 192.168.1.102:8081 max_fails=3 Fail_Timeout=10s; } Server { #Hören Sie auf Port 80 hören Sie 80; #Definieren Sie den Hostnamen. Es können mehrere Hostnamen vorhanden sein, und der Name kann auch reguläre Ausdrücke (~) oder Platzhalter enthalten #(1) Zuerst auf exakte Übereinstimmung prüfen #(2) Wildcard-Match-Prüfung auf der linken Seite: *.fansik.com #(3) Wildcard-Match-Prüfung rechts: mail.* #(4) Überprüfung auf Übereinstimmung mit regulären Ausdrücken: wie etwa ~^.*\.fansik\.com$ #(5)detault_server Servername www.jb51.net; #Legen Sie das Zugriffsprotokoll für diesen virtuellen Host fest access_log-Protokolle/www.jb51.net.access.log; Standort [=|~|~*|^~] uri {...} Funktion: Ermöglicht das Zuordnen definierter Standorte anhand der vom Benutzer angeforderten URI. Wenn eine Übereinstimmung gefunden wird, wird die Anforderung von der Konfiguration im entsprechenden Standortkonfigurationsblock verarbeitet. =: Zeigt die Prüfung auf exakte Übereinstimmung an ~: Musterübereinstimmungsprüfung für reguläre Ausdrücke, Groß-/Kleinschreibung beachten ~*: Musterübereinstimmungsprüfung für reguläre Ausdrücke, keine Groß-/Kleinschreibung beachten ^~: entspricht der ersten Hälfte der URI, reguläre Ausdrücke werden nicht unterstützt !~: Der Anfang zeigt einen Groß-/Kleinschreibung beachtenden, nicht übereinstimmenden regulären Ausdruck an !~*: Der Anfang zeigt einen nicht übereinstimmenden regulären Ausdruck ohne Berücksichtigung der Groß- und Kleinschreibung an. /: Universelle Übereinstimmung, jede Anfrage wird abgeglichen Standort / { #Definieren Sie den Standardspeicherort des Website-Stammverzeichnisses des Servers Stamm-HTML; #Definieren Sie den Namen der Homepage-Indexdatei Index Index.html Index.htm; #Referenz der Reverse-Proxy-Konfiguration, das Konfigurationsdateiverzeichnis hängt von den Kompilierungsparametern ab #Wenn während der Kompilierung --conf-path=/etc/nginx/nginx.conf hinzugefügt wird, um den Pfad der Konfigurationsdatei anzugeben, wird proxy.conf im Verzeichnis /etc/nginx/ abgelegt #Wenn kein Konfigurationsdateipfad angegeben ist, legen Sie die Proxy.conf-Konfiguration im conf-Verzeichnis von nginx ab proxy.conf einschließen; #Definieren Sie die Backend-Load-Servergruppe Proxy-Passwort http://fansik; } Der Unterschied zwischen Aliaspfad und Stammpfad; Standort /Bilder/ { Stammverzeichnis "/data/images" } //www.jb51.net/images/a.jpg <-- /data/images/images/a.jpg Standort /Bilder/ { Alias „/Daten/Bilder/“ } //www.jb51.net/images/a.jpg <-- /data/images/a.jpg
#Definieren Sie die Fehlerseite Fehlerseite 500 502 503 504 /50x.html; Standort = /50x.html { Stamm-HTML; } #Legen Sie die Adresse fest, um den Nginx-Status anzuzeigen #Kann nur am Standort definiert werden #htpasswd -c -m /etc/nginx/.htpasswd fansik (Parameter -c wird beim ersten Erstellen verwendet) Standort /Status { stub_status ein; alles erlauben; #access_log off; #erlauben Sie 192.168.1.0/24; #alles ablehnen; #auth_basic "Status"; #auth_basic_user_file /etc/nginx/.htpasswd; } Beispielbeschreibung des Statusergebnisses: Aktive Verbindungen: 1 (die Anzahl der aktuell offenen Verbindungen) Server akzeptiert bearbeitete Anfragen 174 (eingehende Verbindungen akzeptiert) 174 (verarbeitete Verbindungen) 492 (verarbeitete Anfragen, im Keep-Alive-Modus kann die Anzahl der Anfragen größer sein als die Anzahl der Verbindungen) Lesen: 0 Schreiben: 1 Warten: 0 Lesen: Die Anzahl der Verbindungen, die Anfragen akzeptieren. Schreiben: Die Anzahl der Verbindungen, die die Anfrage abgeschlossen haben und dabei sind, die Anfrage zu verarbeiten oder die Antwort zu senden. Warten: Die Anzahl der aktiven Verbindungen im Modus „Verbindung halten“.
#IP-basierte Zugriffskontrolle IP/Netzmaske zulassen IP/Netzmaske verweigern Standort ~ /\.ht { alles leugnen; } } 6. Reverse-Proxy-Konfiguration (die Reverse-Proxy-Konfiguration wird normalerweise in einer separaten Konfigurationsdatei proxy.conf abgelegt, auf die per Include verwiesen wird)
Proxy_Redirect aus; #Der Backend-Webserver kann die echte IP des Benutzers über X-Forwarded-For erhalten 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; #Nginx-Verbindungstimeout mit Backend-Server (Proxy-Verbindungstimeout) Proxy_Verbindungstimeout 60; #Nach erfolgreicher Verbindung die Antwortzeit des Backend-Servers (Timeout beim Proxy-Empfang) Proxy_Lese_Timeout 120; #Datenübertragungszeit des Backend-Servers (Timeout für das Senden des Proxys) Proxy_Sendezeitüberschreitung 20; #Stellen Sie den Proxyserver (nginx) so ein, dass die Puffergröße der Benutzerheaderinformationen gespeichert wird Proxy-Puffergröße 32k; #proxy_buffers Puffer, die durchschnittliche Webseite ist unter 32k eingestellt Proxy-Puffer 4 128k; #Puffergröße bei hoher Belastung (proxy_buffers*2) Proxy_Busy_Buffer_Größe: 256 KB; #Legen Sie die Größe des Cache-Ordners fest. Wenn sie größer als dieser Wert ist, wird sie vom Upstream-Server übertragen. Proxy_Temp_File_Schreibgröße 256k; #1G Speicherpufferspeicher, 3 Tage lang kein Löschen erforderlich, maximaler Festplattenpufferspeicher 2G Proxy-Cache-Pfad /Daten/nginx/Cache-Ebenen=1:2 Schlüsselzone=Cache_eine:1024m inaktiv=3d max. Größe=2g; 7. Konfiguration des https-Dienstes
Server { hören Sie 443 SSL; Servername test.fansik.cn; SSL-Zertifikat 100doc.cn.crt; SSL-Zertifikatschlüssel 100doc.cn.key; ssl_session_cache geteilt:SSL:1m; SSL-Protokolle SSLv2 SSLv3 TLSv1; SSL-Sitzungszeitüberschreitung 5 Min. ssl_ciphers ALLE:!ADH:!EXPORT56:RC4+RSA:+HOCH:+MITTEL:+NIEDRIG:+SSLv2:+EXP; ssl_prefer_server_ciphers ein; Standort / { Stammverzeichnis /data/app Index Index.html Index.htm; } }
8. Umschreiben der URL-Adresse Regex-Ersetzungsflag neu schreiben Beispiel: rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;#$1 ist der Inhalt in den vorherigen Klammern //www.jb51.net/images/a/1.jpg --> //www.jb51.net/imgs/a/1.jpg Flagge: zuletzt: Sobald diese Umschreiberegel umgeschrieben ist, wird sie nicht mehr von anderen Umschreiberegeln verarbeitet. Stattdessen initiiert der User Agent eine erneute Anforderung für die umgeschriebene URL und startet einen ähnlichen Prozess von Anfang an. Unterbrechung: Sobald die Umschreibregel abgeschlossen ist, initiiert der Benutzeragent eine erneute Anforderung an die neue URL. Und wird nicht von irgendwelchen Umschreiberegeln am aktuellen Standort überprüft Umleitung: Gibt eine neue URL mit einem 302-Antwortcode zurück (temporäre Umleitung) permanent: Gibt die neue URL mit einem 301-Antwortcode zurück (permanente Weiterleitung) 9. Wenn Urteil <br /> Syntax: if (Bedingung) {...} Anwendungsumgebung: Server, Standort Zustand: (1) Variablenname: Wenn der Variablenwert eine leere Zeichenfolge ist oder mit „0“ beginnt, ist er falsch, andernfalls ist er wahr (2) Vergleichsausdrücke mit Variablen als Operanden können mit Vergleichsoperatoren wie = und != getestet werden. (3) Mustervergleichsoperationen für reguläre Ausdrücke ~: Groß-/Kleinschreibung beachtende Musterübereinstimmungsprüfung ~*: Musterübereinstimmungsprüfung ohne Berücksichtigung der Groß-/Kleinschreibung !~ und !~*: Negieren Sie die beiden obigen Tests (4) Testen Sie, ob der Pfad eine Datei ist: -f ,~-f (5) Testen Sie, ob der angegebene Pfad ein Verzeichnis ist: -d,!-d (6) Prüfen der Dateiexistenz: -e,!-e (7) Prüfen Sie, ob die Datei über Ausführungsberechtigung verfügt: -x,!-x Zum Beispiel: wenn($http_user_agent ~* MSIE){ umschreiben ^(.*)$ /msie/$1 break; }
10. Anti-Hotlinking
Standort ~* \.(jpg|gif|jpeg|png)$ { valid_referer, keiner blockiert, www.jb51.net; wenn ($ungültiger_Referrer) { neu schreiben ^/ //www.jb51.net/403.html; } }
Zusammenfassen: Zum Abschluss empfehle ich noch eine Website zum vertieften Studium von Nginx: http://tengine.taobao.org/book/index.html Dies ist das Ende dieses Artikels über die detaillierte chinesische Erklärung der Nginx-Konfigurationsparameter (Lastausgleich und Reverse-Proxy). Weitere relevante chinesische Erklärungen der Nginx-Parameter finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:- Vollständiger Prozessbericht der Nginx-Reverse-Proxy-Konfiguration
- Konfigurationscodebeispiel für Nginx-Forward- und Reverse-Proxy sowie Lastausgleichsfunktionen
- Einfache Schritte zum Konfigurieren des Nginx-Reverse-Proxys mit SSL
- Nginx Reverse-Proxy-Konfiguration entfernt Präfix
- Detaillierte Schritte zur Yum-Konfiguration des Nginx-Reverse-Proxys
- Detaillierte Erläuterung der Nginx Reverse Proxy WebSocket-Konfiguration
- Eine universelle Nginx-Schnittstelle zur Implementierung der Reverse-Proxy-Konfiguration
- Tutorial: Nginx-Reverse-Proxy-Konfiguration zum Entfernen von Präfixen
|