Heim  >  Artikel  >  Backend-Entwicklung  >  Nginx Common Application Technology Guide [Nginx Tips] Zweite Ausgabe

Nginx Common Application Technology Guide [Nginx Tips] Zweite Ausgabe

WBOY
WBOYOriginal
2016-07-30 13:29:321310Durchsuche
Autor: NetSeek http://www.linuxtone.org (IT Operation and Maintenance Expert Network | Cluster Architecture | Performance Tuning)
Willkommen zum Nachdruck, bitte tun Sie es Geben Sie daher beim Nachdruck unbedingt die Originalquelle des Artikels, Informationen zum Autor und diese Aussage in Form eines Hyperlinks an.
Erstveröffentlichung: 25.11.2008 Aktualisiert: 14.1.2009
Inhalt
1. Nginx-Grundkenntnisse
2. Nginx-Installation und Debugging
3. Nginx Rewrite
4. Nginx Redirect
5. Nginx-Verzeichnis fügt automatisch Schrägstriche hinzu:
6. Nginx-Standort
Nginx läuft ab
8. Nginx-Anti-Hotlink
9. Nginx-Zugriffskontrolle
10. Nginx-Protokollverarbeitung
Elf, Nginx-Cache
Zwölf, Nginx-Lastausgleich 13.
Einfache Nginx-Optimierung                                                                   5. Nginx-Dienstüberwachung16. Häufige Probleme und Fehlerbehandlung.
17. Verwandte Ressourcen-Downloads
[Vorwort]:
Dieser technische Leitfaden wurde geschrieben, um die Verwendung von NGINX in China bekannt zu machen um jedem einfacher zu helfen, einige Anwendungen von NGINX Skill zu verstehen und zu beherrschen. Viele der Tipps in diesem Leitfaden stammen aus dem Internet, von der Arbeit oder aus Fragen von Freunden im Internet. Ich möchte meinen Dank und meinen Respekt gegenüber Freunden im Internet zum Ausdruck bringen, die bereit sind, sie zu teilen! Ich heiße alle herzlich willkommen, gemeinsam mit mir diesen technischen Leitfaden zu bereichern und bessere Vorschläge zu machen! Freunde, bitte beachten Sie: http://www.linuxtone.org Technology Sharing Community! Voneinander lernen und gemeinsam Fortschritte machen!1. Grundkenntnisse von Nginx
Einführung engine x") ist ein leistungsstarker HTTP- und Reverse-Proxy-Server, außerdem ein IMAP/POP3/SMTP-Proxy-Server. Nginx wurde von Igor Sysoev für Russlands am zweithäufigsten besuchte Website Rambler.ru entwickelt und ist dort seit mehr als zweieinhalb Jahren aktiv. Igor veröffentlicht den Quellcode unter einer BSD-ähnlichen Lizenz. Obwohl es sich noch um eine Beta-Version handelt, Nginx Es ist bereits für seine Stabilität, seinen umfangreichen Funktionsumfang, Beispielkonfigurationsdateien und seinen geringen Systemressourcenverbrauch bekannt.
Weitere Informationen finden Sie im offiziellen Wiki:
http://wiki.codemongers.com/2. Vorteile von Nginx
Als HTTP-Server verfügt Nginx über die folgenden Grundfunktionen:
1) Verarbeiten Sie statische Dateien, Indexdateien und automatische Indizierung der Deskriptorpufferung offener Dateien.
2) Cache-freie Reverse-Proxy-Beschleunigung, einfacher Lastausgleich und Fehlertoleranz.
3) FastCGI, einfacher Lastausgleich und Fehlertoleranz.
4) Modularer Aufbau. Einschließlich Filter wie Gzipping, Bytebereiche, Chunked-Antworten und SSI-Filter. Wenn mehrere auf einer einzelnen Seite vorhandene SSIs von FastCGI oder einem anderen Proxyserver verarbeitet werden, kann diese Verarbeitung parallel ablaufen, ohne aufeinander zu warten.
5) Unterstützt SSL und TLS SNI
.
Nginx wurde speziell für die Leistungsoptimierung entwickelt. Leistung ist der wichtigste Aspekt, und bei der Implementierung wird großer Wert auf Effizienz gelegt. Es unterstützt das Kernel-Poll-Modell und hält hohen Belastungen stand. Berichten zufolge kann es bis zu 50.000 gleichzeitige Verbindungen unterstützen.
Nginx weist eine hohe Stabilität auf. Wenn andere HTTP-Server auf Zugriffsspitzen stoßen oder jemand in böswilliger Absicht eine langsame Verbindung initiiert, kann dies auch dazu führen, dass der physische Speicher des Servers erschöpft ist, häufig ausgetauscht wird und die Antwort verloren geht, und der Server kann nur neu gestartet werden. Wenn Apache beispielsweise derzeit mehr als 200 Prozesse hat, wird die Web-Reaktionsgeschwindigkeit offensichtlich sehr langsam sein. Nginx verwendet eine Technologie zur schrittweisen Ressourcenzuweisung, wodurch die CPU- und Speicherauslastung sehr gering ist. Nginx gibt offiziell an, dass es 10.000 inaktive Verbindungen aufrechterhält. Es belegt nur 2,5 MB Speicher, sodass Angriffe wie DOS grundsätzlich schädlich für Nginx sind. ist nutzlos. In Bezug auf die Stabilität ist Nginx besser als Lighthttpd.
Nginx unterstützt Hot Deployment.Es ist besonders einfach zu starten und kann fast rund um die Uhr laufen, ohne dass ein Neustart erforderlich ist, selbst wenn es mehrere Monate läuft. Sie können die Softwareversion auch ohne Serviceunterbrechung aktualisieren.
Nginx übernimmt das Master-Slave-Modell, das die Vorteile von SMP voll ausnutzen und die Blockierungsverzögerung von Worker-Prozessen bei Festplatten-E/A reduzieren kann. Bei Verwendung von select()/poll()-Aufrufen können Sie auch die Anzahl der Verbindungen pro Prozess begrenzen.
Die Qualität des Nginx-Codes ist sehr hoch, der Code ist sehr standardisiert, die Techniken sind ausgereift und die Modulerweiterung ist ebenfalls einfach. Besonders hervorzuheben sind die leistungsstarken Upstream- und Filterketten. Upstream bildet eine gute Grundlage für das Schreiben von Modulen wie Reverse Proxy und Kommunikation mit anderen Servern. Der coolste Teil der Filterkette besteht darin, dass nicht jeder Filter warten muss, bis die Ausführung des vorherigen Filters abgeschlossen ist. Es kann die Ausgabe des vorherigen Filters als Eingabe des aktuellen Filters verwenden, was ein bisschen der Unix-Pipeline ähnelt. Dies bedeutet, dass ein Modul mit der Komprimierung von Anforderungen beginnen kann, die vom Backend-Server gesendet werden, und dass das Modul dies tun kann Der komprimierte Stream wird an den Client weitergeleitet, bevor die gesamte Anfrage an den Backend-Server abgeschlossen wird.
Nginx übernimmt einige der neuesten Funktionen des Betriebssystems, wie z. B. Unterstützung für sendfile (Linux 2.2+), Accept-Filter (FreeBSD 4.1+), TCP_DEFER_ACCEPT (Linux 2.4+), wodurch die Leistung erheblich verbessert wird
2. Nginx-Installation und Debugging
1. Pcre-Installation

CODE:

./configure<code>./configure<br>  make && make install<br>  cd ../ make && make install cd ../2. nginx kompilieren und installieren

CODE:./configure --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-openssl=/usr/local/openssl <br>make && make install./configure --user=www --group=www - - Präfix=/usr/local/nginx/ --with-http_stub_status_module --with-openssl=/usr/local/openssl <span>make && make install</span>Detailliertere Modulanpassungen und -installationen finden Sie im offiziellen Wiki
3. Nginx-Konfigurationsdateitest:

CODE:# /usr/local/nginx/sbin/nginx -t  //Debug 配置文件的关键命令需要重点撑握.<br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok <br>2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully# /usr/local/nginx/sbin/nginx -t //Die Schlüsselbefehle der Debug-Konfigurationsdatei müssen gemeistert werden.<span>16.12.2008 09:08:35 [info] 28412#0: Die Syntax der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist in Ordnung </span>16.12.2008 09 :08:35 [info] 28412#0: Die Konfigurationsdatei /usr/local/nginx/conf/nginx.conf wurde erfolgreich getestet

3. Nginx-Startup:

# /usr/local/nginx/sbin/nginxCODE:

4 Änderung und Neuladen der Konfigurationsdatei:

# kill -HUP `cat /usr/local/nginx/logs/nginx.pidCODE:
`
3. Nginx Rewrite Grundlegende Tags (Flags)
zuletzt – Dieses Flag wird grundsätzlich verwendet.
※Entspricht der [L]-Markierung in Apache, die den Abschluss des Umschreibens anzeigt und nicht mehr mit nachfolgenden Regeln übereinstimmt
break – Umleitung abbrechen und Abgleich nicht mehr fortsetzen
redirect – HTTP-Status 302 der temporären Umleitung zurückgeben
permanent - Gibt den HTTP-Status 301 der permanenten Umleitung zurück
※Die ursprüngliche URL unterstützt reguläre Ausdrücke. Die umgeschriebene URL unterstützt keine regulären Ausdrücke
2. Regulärer Ausdrucksabgleich, wobei:
* ~   ist eine Übereinstimmung, bei der die Groß-/Kleinschreibung beachtet wird
* ~*    ist eine Übereinstimmung, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird
* !~ und !~* sind Nichtübereinstimmungen zwischen Groß- und Kleinschreibung.
3. Datei- und Verzeichnisübereinstimmungen, darunter:
* -f und !-f werden verwendet, um festzustellen, ob die Datei existiert
* -d und !-d werden verwendet, um festzustellen, ob das Verzeichnis existiert
* -e und !-e werden verwendet, um festzustellen, ob die Datei oder das Verzeichnis existiert
* -x und !-x werden verwendet, um festzustellen, ob die Datei ausführbar ist
3. Einige der in Nginx verfügbaren globalen Variablen können für die bedingte Beurteilung verwendet werden: CODE:

$args

$content_length$args<br>$content_length<br>$content_type<br>$document_root<br>$document_uri<br>$host<br>$http_user_agent<br>$http_cookie<br>$limit_rate<br>$request_body_file<br>$request_method<br>$remote_addr<br>$remote_port<br>$remote_user<br>$request_filename<br>$request_uri<br>$query_string<br>$scheme<br>$server_protocol<br>$server_addr<br>$server_name<br>$server_port<br>$uri$content_type $document_root$document_uri
$host$http_user_agent$http_cookie

$limit_rate

$request_body_fileserver<br>{<br>listen 80;<br>server_name linuxtone.org netseek.linuxtone.org;<br>index index.html index.php;<br>root /data/www/wwwroot;<br>if ($host !~ "^www.linxtone.org$") {<br>rewrite ^(.*) http://www.linuxtone.org redirect;<br>}<br>........................<br>}$request_method$remote_addr$remote_port

$remote_user

$request_filename$request_uri$query_string$scheme$server_protocol$server_addr$server_name$server_port$uri4. Nginx Redirect Alle linuxtone.org- und netseek.linuxtone.org-Domainnamen auf http://www.linuxtone.org umleiten CODE:server{listen 80;server_name linuxtone.org netseek.linuxtone.org;index index.html index.php;root /data/www/wwwroot;if ($host !~ "^www.linxtone.org$") {rewrite ^(.*) http://www.linuxtone.org$1 weitergeleitet;}........................}5. Nginx-Verzeichnisse fügen automatisch Schrägstriche hinzu:CODE:if (-d $request_filename){<br>           rewrite ^/(.*)([^/])$ http://$host// permanent;<br>     }Six Nginx-Standort
1. Grundlegende Syntax: [Im Wesentlichen konsistent mit der oben genannten regulären Matching-Syntax zum Umschreiben]
location [=|~|~*|^~] /uri/ { … }
* ~ ist eine Übereinstimmung, bei der die Groß-/Kleinschreibung beachtet wird
* ~* ist eine Übereinstimmung, bei der die Groß-/Kleinschreibung nicht beachtet wird
* !~ und !~* sind Nichtübereinstimmungen zwischen Groß- und Kleinschreibung bzw. Nichtübereinstimmung
Beispiel 1:
location = / {
# entspricht nur der Abfrage /.
# entspricht nur der Abfrage /.
}
entspricht jeder Abfrage, da alle Anfragen mit / beginnen. Regeln für reguläre Ausdrücke und Regeln für lange Blöcke werden jedoch priorisiert und mit Abfragen abgeglichen
Beispiel 2:
Standort ^~ /images/ {
# entspricht jeder Abfrage, die mit /images/ beginnt, und stoppt die Suche,
#, sodass reguläre Ausdrücke nicht überprüft werden.
# entspricht jeder Abfrage, die mit /images beginnt / Starten Sie eine beliebige Abfrage und stoppen Sie die Suche. Reguläre Ausdrücke werden nicht getestet.
Beispiel 3:
Standort ~* .(gif|jpg|jpeg)$ {
# entspricht jeder Anfrage, die auf gif, jpg oder jpeg endet. Allerdings werden alle
# Anfragen an das Verzeichnis /images/ von
}
# Entspricht jeder Anfrage, die mit gif, jpg oder jpeg endet.
7. Nginx läuft ab
1. Je nach Dateityp läuft abCODE:

# Expires-Header für statischen Inhalt hinzufügen

Speicherort ~* .(js|css|jpg|jpeg|gif|png|swf)$ {# Add expires header for static content<br>location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {<br>    if (-f $request_filename) {<br>       root /data/www/wwwroot/bbs;<br>       expires      1d;<br>       break;<br>    }<br>} if (-f $request_filename) { root /data/www/wwwroot/bbs; läuft 1 Tag ab;

break;

}# serve static files<br>location ~ ^/(images|javascript|js|css|flash|media|static)/  {<br>root    /data/www/wwwroot/down;<br>        expires 30d;<br>  }}2 , basierend auf der Beurteilung eines Verzeichnisses
CODE:# statische Dateien bereitstellenSpeicherort ~ ^/(images|javascript|js|css|flash|media|static)/ {

root /data/www/wwwroot/down;

läuft 30 Tage ab;#Preventing hot linking of images and other file types<br>location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {<br>        valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost baidu.com;<br>if ($invalid_referer) {<br>      rewrite   ^/   ;<br>     # return   403;<br>      }<br>} 8 Typen

CODE:

#Verhindert die direkte Verknüpfung von Bildern und anderen Dateien Typen<code>location /img/ {<br>    root /data/www/wwwroot/bbs/img/;<br>    valid_referers none blocked server_names *.linuxtone.org http://localhost baidu.com;<br>    if ($invalid_referer) {<br>                   rewrite  ^/  ;<br>                   #return   403;<br>    }<br>}Standort ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ { Valid_referers keine blockiert server_names *.linuxtone.org linuxtone.org http://localhost baidu. com;if ($invalid_referer) {

rewrite ^/ ;

# return 403;#Preventing hot linking of images and other file types<br>location ~* ^.+.(gif|jpg|png|swf|flv|rar|zip)$ {<br>        valid_referers none blocked server_names *.linuxtone.org linuxtone.org http://localhost ;<br>if ($invalid_referer) {<br>      rewrite   ^/   ;<br>                     }<br>     access_log off;<br>     root /data/www/wwwroot/bbs;<br>expires 1d;<br>     break;<br>} }}2. Für verschiedene Verzeichnisse
CODE:location /img/ {<p> root /data/www/wwwroot/bbs/img/;</p> valid_referers none blockiert server_names *.linuxtone.org http://localhost baidu com ; if ($invalid_referer) { rewrite ^/ ; #return 403; 3 Die gleiche Methode, um Anti-Hotlinking zu erreichen und läuft ab CODE:#Verhindert die direkte Verknüpfung von Bildern und anderen Dateien Typen <o> Ort ~ * ^.+. (GIF | JPG | PNG | SWF | FLV | RAR | ZIP) $ { Valid_referrs None Blocked Server_names * .linuxTone.org Linuxtone.org Calhost; $invalid_referer) { rewrite ^/ ; } access_log off; root /data/www/wwwroot/bbs;expires 1d; break;}9. Nginx-Zugriffskontrolle1. Nginx-ID-ÜberprüfungCODE:<code>#cd /usr/local/nginx/conf<br>#mkdir htpasswd<br>/usr/local/apache2/bin/htpasswd -c /usr/local/nginx/conf/htpasswd/tongji linuxtone <br>#添加用户名为linuxtone<br>New password:   (此处输入你的密码)<br>Re-type new password:   (再次输入你的密码)<br>Adding password for user<br>http://count.linuxtone.org/tongji/data/index.html(目录存在/data/www/wwwroot/tongji/data/目录下)<br>将下段配置放到虚拟主机目录,当访问http://count.linuxtone/tongji/即提示要密验证:<br>location ~ ^/(tongji)/  {<br>                root    /data/www/wwwroot/count;<br>                        auth_basic              "LT-COUNT-TongJi";<br>                        auth_basic_user_file  /usr/local/nginx/conf/htpasswd/tongji;<br>                }2. Nginx verbietet den Zugriff auf bestimmte Dateitypen.
Zum Beispiel ist der Zugriff auf *.txt-Dateien unter Nginx verboten.

CODE:

location ~* .(txt|doc)$ {<code>location ~* .(txt|doc)$ {<br>   if (-f $request_filename) {<br>   root /data/www/wwwroot/linuxtone/test;<br>   #rewrite …..可以重定向到某个URL<br>   break;<br>   }<br>} if (-f $request_filename) { root /data/www/wwwroot/linuxtone/test; #rewrite…..ok Weiterleiten zu einer URL

break;

}location ~* .(txt|doc)${<br>        root /data/www/wwwroot/linuxtone/test;<br>        deny all;<br>}}Methode 2:
CODE:location ~ * .(txt| doc)${                                                                                                                                                                                          mit Verzeichnis 🎜>CODE:

location ~ ^/(WEB-INF)/ {

                            Alle ablehnen; 🎜>CODE:location ~ ^/(WEB-INF)/ { <br>            deny all; <br>}  location / {<span>deny 192.168.1.1;</span>allow 192.168.1.0/24;<p>allow 10.1.1.0/16;</p>deny all;<code>location / {<br>    deny    192.168.1.1;<br>    allow   192.168.1.0/24;<br>    allow   10.1.1.0/16;<br>    deny    all;<br>} }Weitere Informationen finden Sie im Wiki: http://wiki.codemongers.com/NginxHttpAccessModule#allow
4. Nginx-Download begrenzt Parallelität und Rate

CODE :

limit_zone linuxtone $binary_remote_addr 10m;<code>limit_zone   linuxtone  $binary_remote_addr  10m;<br>server<br>       {<br>               listen       80;<br>               server_name  down.linuxotne.org;<br>               index index.html index.htm index.php;<br>               root   /data/www/wwwroot/down;<br>               #Zone limit<br>               location / {<br>                   limit_conn   linuxtone  1;<br>                   limit_rate  20k;<br>               }<br>..........<br>       }server { listen 80;
server_ name down.linuxotne.org; index index.html index. php; root /data/www/wwwroot/down; #Zone limit location / {
limit_conn lin uxtone 1;                   limit_rate                                         .......

Im Gästezimmer ist nur ein Thread erlaubt, jeder Thread ist 20k.

location  /  {<br>    autoindex  on;<br>}[Hinweis]
limit_zone linuxtone $binary_remote_addr 10m; Dies kann im Hauptverzeichnis definiert werden
5. Nginx implementiert die gleiche Verzeichnisliste wie Apache CODE:location / { autoindex on;
} 6. Dateigrößenbeschränkung
Fügen Sie Folgendes zur Hauptkonfigurationsdatei hinzu. Die spezifische Größe sollte entsprechend Ihrem eigenen Unternehmen angepasst werden.
client_max_body_size 10m;
10. Nginx-Protokollverarbeitung
1.Nginx-Protokollschneiden

#contab -e 59 23 * * * /usr/local/sbin/logcron.sh /dev/null 2>&1[root@count ~]# cat /usr/local/sbin/logcron.shCODE:#!/bin/bash<br>log_dir="/data/logs"<br>time=`date +%Y%m%d`  <br>/bin/mv  ${log_dir}/access_linuxtone.org.log ${log_dir}/access_count.linuxtone.org.$time.log<br>kill -USR1 `cat  /var/run/nginx.pid`Für weitere Protokollanalyse und -verarbeitung beachten Sie bitte (Sie können sich gerne an der Diskussion beteiligen):http://bbs.linuxtone.org/forum-8-1.html
2 .Verwenden Sie AWSTATS, um NGINX-Protokolle zu analysieren
Legen Sie das Nginx-Protokollformat fest und verwenden Sie dann awstats zur Analyse.
Bitte beachten Sie: http: //bbs.linuxtone .org/thread-56-1-1.html
3. Wie Nginx einige Protokolle nicht aufzeichnet
Es gibt zu viele Protokolle, mehrere G pro Tag, weniger aufzeichnen, wie folgt. Schreiben Sie einfach die Konfiguration in den Abschnitt server{}
location ~ .*.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF) $
{
access_log off;
}
11. Nginx Cache-Dienstkonfiguration
Wenn Sie die Datei lokal zwischenspeichern müssen, müssen Sie die folgenden Unterparameter hinzufügen:

CODE:

proxy_store on;<code>proxy_store on;<br>proxy_store_access user:rw group:rw all:rw;<br>proxy_temp_path 缓存目录;proxy_store_access user:rw group:rw all:rw;proxy_temp_path Cache-Verzeichnis;Unter anderem wird
proxy_store on verwendet, um den Cache für die lokale Funktion zu aktivieren, und
proxy_temp_path wird verwendet, um den Cache-Speicherort anzugeben, z. B.: Proxy_temp_path html;
Nach der vorherigen Konfiguration wird die Datei bei jeder Anforderung auf der lokalen Festplatte zwischengespeichert zieht die Datei weiterhin an das entfernte Ende, um zu vermeiden, dass Dateien aus der Ferne abgerufen werden. Sie müssen

CODE:proxy_pass:<br>if ( !-e $request_filename) {<br>    proxy_pass  http://mysvr;<br>}proxy_pass:<span>if ( !-e $request_filename) { ändern. </span> Proxy-Pass http://mysvr; Proxy_temp_path, es wird vom Backend abgerufen. <br><span></span> <br><span></span>Für fortgeschrittenere Anwendungen können Sie ncache studieren. Weitere Informationen finden Sie in den ncache-bezogenen Informationen unter <span>http://bbs.linuxtone. org</span>Beiträge.<br><span></span>12. Nginx-Lastausgleich<br><span></span>1. Grundkenntnisse des Nginx-Lastausgleichs<br><span></span>Der Upstream von Nginx wird derzeit unterstützt 4 Arten Verteilungsmethode <br><span></span>1), Abfrage (Standard) <br><span></span>Jede Anfrage wird nacheinander in chronologischer Reihenfolge einem anderen Backend-Server zugewiesen nach unten, kann automatisch beseitigt werden. <br><span></span>2), Gewichtung<br><span></span> gibt die Abfragewahrscheinlichkeit an, die Gewichtung ist proportional zum Zugriffsverhältnis und wird verwendet, wenn die Leistung des Back-End-Servers ungleichmäßig ist. <br><span></span>2), ip_hash<br><span></span>Jede Anfrage wird entsprechend dem Hash-Ergebnis der abgerufenen IP zugewiesen, sodass jeder Besucher festen Zugriff auf einen Back-End-Server hat. was das Sitzungsproblem lösen kann. <br><span></span>3), fair (Drittanbieter) <br><span></span>Anfragen werden entsprechend der Antwortzeit des Backend-Servers zugewiesen, und diejenigen mit kurzen Antwortzeiten werden zuerst zugewiesen. <br><span></span>4), url_hash (Drittanbieter) <br><span></span>2. Nginx-Lastausgleichsinstanz 1<p></p>CODE:<code>upstream bbs.linuxtone.org {#定义负载均衡设备的Ip及设备状态<br>    server 127.0.0.1:9090 down;<br>    server 127.0.0.1:8080 weight=2;<br>    server 127.0.0.1:6060;<br>    server 127.0.0.1:7070 backup;<br>}upstream bbs. linuxtone.org {#Definieren Sie die IP- und Gerätestatus des Lastausgleichsgeräts <span> Server 127.0.0.1:9090 down;</span> Server 127.0.0.1:8080 Weight=2;<br> Server 127.0.0.1:6060; <span> > Server 127.0.0.1:7070 Backup;</span>}Hinzufügen
proxy_pass http://bbs.linuxtone org/
;
Der Status jedes Geräts ist eingestellt auf:
a) Down bedeutet, dass der Frontserver vorübergehend nicht an der Last teilnimmt
b) Das Gewicht ist standardmäßig auf 1 eingestellt. Je größer das Gewicht, desto größer das Gewicht der Ladung.
c) max_fails: Die Anzahl der zulässigen Anforderungsfehler beträgt standardmäßig 1. Wenn die maximale Anzahl überschritten wird, wird der vom Modul „proxy_next_upstream“ definierte Fehler zurückgegeben
d ) fail_timeout: max_fails-Fehler Danach die Pausenzeit.
e) Backup: Wenn alle anderen Nicht-Backup-Maschinen ausgefallen oder ausgelastet sind, fordern Sie die Backup-Maschine an. Daher wird diese Maschine den geringsten Druck haben.
nginx unterstützt die gleichzeitige Einrichtung mehrerer Lastausgleichsgruppen für die Verwendung durch ungenutzte Server.
client_body_in_file_only Auf „Ein“ gesetzt, können Sie die Daten aus dem Client-Beitrag in einer Datei zum Debuggen aufzeichnen.
client_body_temp_path Legen Sie das Verzeichnis der Aufzeichnungsdatei fest und Sie können es einrichten auf 3 Verzeichnisebenen
Standort stimmt mit der URL überein. Sie können einen neuen Proxy-Lastausgleich durchführen
3 > Verteilen Sie Anforderungen entsprechend dem Hash-Ergebnis der aufgerufenen URL, sodass jede URL an denselben Back-End-Server weitergeleitet wird. Dies ist effektiver, wenn der Back-End-Server zwischengespeichert wird. Dies kann auch zur Verbesserung verwendet werden die Squid-Cache-Trefferrate.
Einfaches Lastausgleichsbeispiel:

#vi nginx.conf //nginx-Hauptkonfigurationsdatei-KernkonfigurationCODE: ……….<br>#loadblance my.linuxtone.org<br>       upstream  my.linuxtone.org  {<br>       ip_hash;<br>       server   127.0.0.1:8080;<br>       server   192.168.169.136:8080;<br>       server   219.101.75.138:8080;<br>       server   192.168.169.117;<br>       server   192.168.169.118;<br>       server   192.168.169.119;<br>     }<br>…………..<br>include          vhosts/linuxtone_lb.conf;<br>………<br># vi proxy.conf<br>proxy_redirect off;<br>proxy_set_header Host $host;<br>proxy_set_header X-Real-IP $remote_addr;<br>proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>client_max_body_size 50m;<br>client_body_buffer_size 256k;<br>proxy_connect_timeout 30;<br>proxy_send_timeout 30;<br>proxy_read_timeout 60;<br>proxy_buffer_size 4k;<br>proxy_buffers 4 32k;<br>proxy_busy_buffers_size 64k;<br>proxy_temp_file_write_size 64k;<br>proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;<br>proxy_max_temp_file_size 128m;<br>proxy_store on;<br>proxy_store_access   user:rw  group:rw  all:r;<br>#nginx cache               <br>#client_body_temp_path  /data/nginx_cache/client_body 1 2;<br>proxy_temp_path /data/nginx_cache/proxy_temp 1 2;#vi linuxtone_lb.conf

CODE:

server<br>    {<br>        listen  80;<br>        server_name my.linuxtone.org;<br>        index index.php;<br>        root /data/www/wwwroot/mylinuxtone;<br>        if (-f $request_filename) {<br>            break;<br>           }<br>        if (-f $request_filename/index.php) {<br>          rewrite (.*) /index.php break;<br>        }<br>        error_page 403 http://my.linuxtone.org/member.php?m=user&a=login;<br>        location / {<br>           if ( !-e $request_filename) {<br>               proxy_pass http://my.linuxtone.org;<br>               break;<br>           }<br>           include /usr/local/nginx/conf/proxy.conf;<br>        }<br>}
13. Nginx einfache Optimierung

1 Dateigröße (Reduzieren Sie die Dateigröße von Nginx)
Die Standard-Nginx-Kompilierungsoption verwendet tatsächlich den Debug-Modus (-g) (der Debug-Modus fügt viel Tracking und ASSERT usw. ein), nach der Kompilierung eins Nginx hat mehrere Megabyte. Entfernen Sie die Debug-Modus-Kompilierung von Nginx. Nach der Kompilierung sind nur noch ein paar hundert K
in auto/cc/gcc. debug
CODE:

Diese Zeilen auskommentieren oder löschen und neu kompilieren.

CFLAGS=”$CFLAGS -g”2. Ändern Sie den Nginx-Header-Verkleidungsserver
1) Ändern Sie nginx.h
CODE:#vi nginx- 0.7 .30/src/core/nginx.h#define NGINX_VERSION "1.8"

#define NGINX_VER "LTWS/" NGINX_VERSION

#define NGINX_VAR "NGINX"#vi nginx-0.7.30/src/core/nginx.h<br>#define NGINX_VERSION      "1.8"<br>#define NGINX_VER          "LTWS/" NGINX_VERSION<br>#define NGINX_VAR          "NGINX"<br>#define NGX_OLDPID_EXT     ".oldbin"#define NGX_OLDPID _EXT ".oldbin" 2) Ändern Sie nginx_http_header_filter_module
#vi nginx-0.7.30/src/http/ngx_http_header_filter_module.c
wird wie folgt sein

CODE:

static char ngx_http_server_string[] = "Server: nginx" CRLF;geändert in

CODE:

static char ngx_http_server_string[] = "Server: LTWS" CRLF;a) Ändern Sie nginx_http_header_filter_module
#vi nginx -0.7 .30/src/http/ngx_http_special_response.c
wird wie folgt lauten:

CODE:

static u_char ngx_http_error_full_tail[] =<code>static u_char ngx_http_error_full_tail[] =<br>""
" NGINX_VER "
" CRLF
" " CRLF
"" CRLF
;

CODE:

static u_char ngx_http_error_tail[] =<code>static u_char ngx_http_error_tail[] =<br>""
nginx
" CRLF
"" CRLF
"" CRLF
; geändert zu:

CODE:

static u_char ngx_http_error_full_tail[] =<br>"
"NGINX_VER"
" CRLF
"
http://www.linuxtone.org
" CRLF
"" CRLF
"" CRLF
;
static u_char ngx_http_error_tail[] =
"
LTWS
" CRLF
"" CRLF
"" CRLF
;Umgebung nach Änderung neu kompilieren,
404-Fehler Wenn die Rendering wird angezeigt (wenn keine Fehlerseite angegeben ist):


404.png


Verwenden Sie den Curl-Befehl, um den Server-Header anzuzeigen


curl.png


3. Geben Sie die CPU-Typ-Kompilierungsoptimierung für eine bestimmte CPU an.
GCC-Kompilierung verwendet von Standard-Nginx Die Parameter sind -O
Wenn Sie mehr Optimierung benötigen, können Sie die folgenden zwei Parameter verwenden
--with-cc-opt='-O3'
--with-cpu-opt=opteron
macht die Kompilierung auf eine bestimmte CPU ausgerichtet und erhöht die Optimierung von GCC Diese Methode verbessert nur die Leistung und führt nicht zu einer großen Leistungsverbesserung.
Bestimmung des CPUD-Typs: # cat /proc/cpuinfo | Kompilierungsoptimierungsparameter Referenz:
http://en.gentoo-wiki.com/wiki/Safe_CFlags4.Tcmalloc optimiert die Nginx-Leistung
CODE:# wget http: //download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz
# tar zxvf libunwind-0.99-alpha.tar.gz# cd libunwind -0.99-alpha/# CFLAGS=-fPIC ./configure

# make CFLAGS=-fPIC

# make CFLAGS=-fPIC install# wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz<br># tar zxvf libunwind-0.99-alpha.tar.gz<br># cd libunwind-0.99-alpha/<br># CFLAGS=-fPIC ./configure<br># make CFLAGS=-fPIC<br># make CFLAGS=-fPIC install<br># wget http://google-perftools.googlecode.com/files/google-perftools-0.98.tar.gz<br># tar zxvf google-perftools-0.98.tar.gz<br># cd google-perftools-0.98/<br># ./configure<br># make && make install<br># echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf<br># ldconfig<br># lsof -n | grep tcmalloc# wget http://google-perftools.googlecode. com/files/google-perftools-0.98.tar.gz# tar zxvf google-perftools-0.98.tar.gz# cd google-perftools-0.98/
# ./configure# make && make install# echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
# ldconfig# lsof -n |. Code>Kompilieren Sie nginx und laden Sie google_perftools_module:
./configure --with-google_perftools_module
Fügen Sie nginx.conf zur Hauptkonfigurationsdatei hinzu. Hinzufügen:
google_perftools_profiles /path/to/profile;

5. Kernel-Parameteroptimierung# vi /etc/sysctl.conf #Fügen Sie Folgendes hinzu Inhalt am Ende: CODE:net.ipv4.tcp_fin_timeout = 30<br>net.ipv4.tcp_keepalive_time = 300<br>net.ipv4.tcp_syncookies = 1<br>net.ipv4.tcp_tw_reuse = 1<br>net.ipv4.tcp_tw_recycle = 1<br>net.ipv4.ip_local_port_range = 5000 65000# Lassen Sie die Konfiguration sofort wirksam werden
/sbin/sysctl -p
14. So erstellen Sie einen leistungsstarken LEMP
Bitte beachten Sie: http://www.linuxtone.org/lemp/lemp.pdf
1. Stellen Sie den vollständigen Download des Konfigurationsskripts bereit: http://www. linuxtone.org/lemp/scripts.tar.gz
2. Stellen Sie allgemeine NGINX-Konfigurationsbeispiele bereit, einschließlich (virtueller Host, Anti-Leeching, Rewrite, Zugriffskontrolle, Lastausgleich
Discuz (verwandtes Programm static usw.) können Sie es mit nur geringfügigen Änderungen online anwenden. 3. Ersetzen Sie den ursprünglichen xcache durch EA und stellen Sie relevante einfache Tuning-Skripte und Konfigurationsdateien bereit.
Weitere und aktualisierte Informationen finden Sie unter: http://www.linuxtone.org
15. Nginx-Überwachung
1. RRDTOOL+Perl-Skriptzeichnungsüberwachung
In diesem Artikel wird rrdtool nicht vorgestellt. Informationen zur spezifischen Installation finden Sie im Abschnitt zur Linuxtone-Überwachung.
#cd /usr/ local/sbnin
#wget http://blog.kovyrin.net/files/mrtg/rrd_nginx.pl.txt
#mv rrd_nginx .pl.txt rrd_nginx .pl
#chmod a+x rrd_nginx.pl
#vi rrd_nginx.pl //Konfigurieren Sie die Skriptdatei, um den Pfad festzulegen
#!/usr/bin/perl
RRDs verwenden;
LWP::UserAgent verwenden;
# Speicherort der rrdtool-Datenbanken definieren
my $rrd = '/data/www/wwwroot/nginx/rrd';
# Speicherort der Bilder definieren
my $img = '/data/www/wwwroot/nginx/html';
# definieren Sie Ihre Nginx-Statistik-URL
my $URL = "http://219.232 .244.13/nginx_status";
…………
[Hinweis] Ändern Sie den entsprechenden Pfad entsprechend Ihrer spezifischen Situation.
#crontab –e //Folgendes hinzufügen
* * * * * /usr/local/sbin/rrd_nginx.pl
Danach Starten Sie Crond neu und konfigurieren Sie den virtuellen Nginx-Host. Zeigen Sie auf das Verzeichnis /data/www/wwwroot/nginx/html und führen Sie das Perl-Skript automatisch über Crond aus, um viele Bilder zu generieren. „connections-day.png“, um das Serverstatusdiagramm anzuzeigen.
2. Offizieller Nginx-rrd-Überwachungsdienst (mehrere virtuelle Hosts) (empfohlen)
Website: http://www.nginx.eu/nginx -rrd.html
Diese Lösung ist eigentlich eine Verbesserung und Erweiterung, die auf der oben genannten Überwachungslösung basiert. Installieren Sie außerdem zuerst das rrdtool-Zeichentool und das entsprechende Perl-Modul und führen Sie dann die folgenden Vorgänge aus:
# yum install perl-HTML*
Erstellen Sie zunächst das generierte Inventar- und Bildspeicherverzeichnis
CODE:#mkdir -p /data/ www /wwwroot/nginx/{rrd,html}#cd /usr/local/sbin

#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz

#tar zxvf nginx-rrd-0.1.4.tgz#mkdir -p /data/www/wwwroot/nginx/{rrd,html}<br>#cd /usr/local/sbin<br>#wget http://www.nginx.eu/nginx-rrd/nginx-rrd-0.1.4.tgz<br>#tar zxvf nginx-rrd-0.1.4.tgz<br>#cd nginx-rrd-0.1.4<br>#cd etc/<br>#cp nginx-rrd.conf /etc<br>#cd etc/cron.d<br>#cp nginx-rrd.cron /etc/cron.d<br>#cd /usr/local/src/nginx-rrd-0.1.4/html<br># cp index.php /data/www/wwwroot/nginx/html/<br>#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin<br>#cp * /usr/sbin/#cd nginx-rrd-0.1.4#cd etc/#cp nginx-rrd.conf /etc

# cd etc/cron.d

#cp nginx-rrd.cron /etc/cron.d#####################################################<br>#<br># dir where rrd databases are stored<br>RRD_DIR="/data/www/wwwroot/nginx/rrd";<br># dir where png images are presented<br>WWW_DIR="/data/www/wwwroot/nginx/html";<br># process nice level<br>NICE_LEVEL="-19";<br># bin dir<br>BIN_DIR="/usr/sbin";<br># servers to test<br># server_utl;server_name<br>SERVERS_URL="http://219.32.205.13/nginx_status;219.32.205.13  http://www.linuxtone.org/nginx_status;www.linuxtone.org""#cd /usr/local/src/nginx-rrd-0.1.4/html# cp index. php /data/www/wwwroot/nginx/html/#cd /usr/local/src/nginx-rrd-0.1.4/usr/sbin
#cp * /usr/sbin/ #vi /etc/nginx-rrd.conf
CODE:###################### ###########################
# Verzeichnis, in dem RRD-Datenbanken gespeichert sindRRD_DIR="/ data/ www/wwwroot/nginx/rrd";# Verzeichnis, in dem PNG-Bilder präsentiert werdenWWW_DIR="/data/www/wwwroot/nginx/html";# schönes Level verarbeiten
NICE_LEVEL =" -19";# bin dirBIN_DIR="/usr/sbin";
# zu testende Server# server_utl;server_nameSERVERS_URL="http://219.32/ nginx_status;219.32.205.13 http://www.linuxtone.org/nginx_status;www.linuxtone.org""
//Passen Sie es entsprechend Ihrer spezifischen Situation an.
SEVERS_URL Format http://domain1/nginx_status;domain1 http://domain2/nginx_status;domain2

Dieses Format überwacht den Verbindungsstatus mehrerer virtueller Hosts:

location /nginx_status {<br>stub_status on;<br>access_log off;<br>allow 192.168.1.37;<br>deny all;<br>}

Fokus auf Starten Sie den Crond-Dienst und greifen Sie dann über

http://219.32.205.13/nginx/html/# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`<br># wget http://forums.cacti.net/download.php?id=12676<br># tar xvfz cacti-nginx.tar.gz<br># cp cacti-nginx/get_nginx_socket_status.pl /data/cacti/scripts/<br># cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/<br># chmod 755 /data/cacti/scripts/get_nginx* darauf zu. Der Konfigurationsprozess ist einfach!

3. CACTI-Vorlagenüberwachung Nginx

Verwenden Sie den Nginx_status-Status, um Bilder zu zeichnen, um die CACTI-Überwachung zu implementierennginx wird kompiliert, um http_stub_status_module zu ermöglichen# vi /usr/local/nginx/conf/nginx.confCODE:location /nginx_status {stub_status on;access_log off ;allow 192.168.1.37;deny all;}CODE:# kill -HUP `cat /usr/local/nginx/logs/nginx .pid `# wget http://forums.cacti.net/download.php?id=12676# tar xvfz cacti-nginx.tar.gz# cp cacti-nginx/get_nginx_socket_status.pl /data /cacti/scripts/# cp cacti-nginx/get_nginx_clients_status.pl /data/cacti/scripts/# chmod 755 /data/cacti/scripts/get_nginx*Erkennungs-Plugin CODE:# /data/cacti/scripts/get_nginx_clients_status.pl http://192.168.1.37/nginx_statusImportieren
cacti_graph_template_nginx_clients_stat.xml im Kakteenverwaltungsfenster
cacti_graph_template_nginx_sockets_stat.xml
16. Häufig gestellte Fragen & Fehlerbehandlung
1. Ursachen und Lösungen für 400 fehlerhafte Anforderungsfehler
Konfigurieren Sie die nginx.conf-bezogenen Einstellungen wie folgt.
client_header_buffer_size 16k ;
large_client_header_buffers 4 64k;
Anpassen entsprechend der spezifischen Situation, im Allgemeinen einfach den Wert entsprechend anpassen.
2. Nginx 502 Bad Gateway Fehler
proxy_next_upstream Fehler Timeout invalid_header http_500 http_503;
Oder versuchen Sie es mit der Einstellung:
large_client_header_buffers 4 32k;
3. 413 Request Entity Too Large Fehler in Nginx
Dieser Fehler tritt normalerweise beim Hochladen von Dateien auf,
Bearbeiten Sie die Nginx-Hauptkonfigurationsdatei Nginx.conf, suchen Sie den Abschnitt http{} und fügen Sie
client_max_body_size 10m hinzu. // Stellen Sie die Größe entsprechend Ihren eigenen Anforderungen ein .
Wenn Sie PHP ausführen, sollte die Größe client_max_body_size mit dem Maximalwert der folgenden Werte in php.ini übereinstimmen oder etwas größer als dieser sein, damit keine Fehler auftreten inkonsistente Größen der übermittelten Daten.
post_max_size = 10M
upload_max_filesize = 2M
4. 504 Gateway Timeout (nginx) lösen
Ich bin beim Aktualisieren des Discuz-Forums auf dieses Problem gestoßen
Im Allgemeinen kann diese Situation dadurch verursacht werden, dass der Antwortpuffer des Standard-Fastcgi-Prozesses zu klein ist Wenn Ihr Fastcgi-Dienst mit dieser Sperre nicht gut zurechtkommt, führt dies höchstwahrscheinlich zu einem 504-Gateway-Timeout
für die heutigen Websites, insbesondere für bestimmte Websites und viel Inhalt, und eine Seite kann sogar Hunderte von KB haben.
Der Standardantwortpuffer des Fastcgi-Prozesses beträgt 8 KB, wir können ihn größer einstellen
Fügen Sie in nginx.conf Folgendes hinzu: fastcgi_buffers 8 128 KB
Das bedeutet, dass der Fastcgi-Puffer auf 8×128k eingestellt wird
Wenn Sie eine bestimmte unmittelbare Operation ausführen, müssen Sie natürlich möglicherweise den Timeout-Parameter von Nginx erhöhen, beispielsweise auf 60 setzen Sekunden: send_timeout 60;
Habe gerade diese beiden Parameter angepasst und das Ergebnis ist, dass der Timeout nicht mehr angezeigt wird. Man kann sagen, dass der Effekt gut ist, aber es kann auch an anderen liegen Gründe. Es gibt derzeit nicht viele Informationen über Nginx, viele Dinge erfordern eine langfristige Ansammlung von Erfahrungen, ich freue mich auf Ihre Entdeckung!
Wie man Nginx Proxy verwendet 🎜>
Ein Freund führt Tomcat auf einem Server aus, IP: 192.168.1.2:8080, eine andere Maschine IP: 192.168.1.8. Mein Freund möchte über http auf den Tomcat-Dienst zugreifen. //192.168.1.8. Die Konfiguration ist wie folgt:
Die Konfiguration auf nginx.conf von 192.168.1.8 ist wie folgt:CODE:

server {

listen 80;server {<br>listen 80;<br>server_name java.linuxtone.org<br>location / {<br>proxy_pass http://192.168.1.2:8080;<br>include /usr/local/nginx/conf/proxy.conf;<br>}<br>}server_name java.linuxtone.orglocation / {proxy_pass http://192.168.1.2:8080;
include /usr/local/nginx/ conf/proxy.conf;}}
6. So schließen Sie Nginx LOG
access_log /dev/null;
17. Laden Sie verwandte Ressourcen herunter 1.nginx-Konfigurationsbeispiel und Skript-Download:
# wget http://www .linuxtone.org/lemp/scripts.tar.gz
#Dieses Skriptbeispiel Regelmäßige Updates.
[Anhang]:

Dieses Dokument wird regelmäßig aktualisiert. Freunde können gerne wertvolle Kommentare abgeben, um den Inhalt von Nginx-Tipps zu bereichern.

Neueste Dokumentveröffentlichung: http://bbs.linuxtone.org Das Obige stellt die zweite Ausgabe des Nginx Common Application Technology Guide [Nginx Tips] vor, der verschiedene Aspekte enthält. Ich hoffe, dass er Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn