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 Inhalt1. Nginx-Grundkenntnisse2. Nginx-Installation und Debugging3. Nginx Rewrite4. Nginx Redirect5. Nginx-Verzeichnis fügt automatisch Schrägstriche hinzu:6. Nginx-StandortNginx läuft ab 8. Nginx-Anti-Hotlink9. Nginx-Zugriffskontrolle 10. Nginx-ProtokollverarbeitungElf, Nginx-CacheZwölf, Nginx-Lastausgleich 13.
Einfache Nginx-Optimierung 5. Nginx-Dienstüberwachung
16. 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 NginxEinfü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 Debugging1. Pcre-InstallationCODE:
./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/nginx
CODE:
4
Änderung und Neuladen der Konfigurationsdatei:
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid
CODE:
`
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_file
server<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-Standort1. 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 ab
CODE:
# 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 bereitstellen
Speicherort ~ ^/(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 TypenCODE:
#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änkungFügen Sie Folgendes zur Hauptkonfigurationsdatei hinzu. Die spezifische Größe sollte entsprechend Ihrem eigenen Unternehmen angepasst werden. client_max_body_size 10m;
10. Nginx-Protokollverarbeitung1.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 aufzeichnetEs 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-DienstkonfigurationWenn 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.confCODE:
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 Optimierung1 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. debugCODE:
Diese Zeilen auskommentieren oder löschen und neu kompilieren.
CFLAGS=”$CFLAGS -g”
2. Ändern Sie den Nginx-Header-Verkleidungsserver1) Ändern Sie nginx.hCODE:
#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 seinCODE:
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 -OWenn 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_CFlags
4.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 -p14. 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, LastausgleichDiscuz (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überwachungIn 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/perlRRDs 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-URLmy $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.plDanach 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 BildspeicherverzeichnisCODE:
#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.confCODE:
###################### ##########################
#
# Verzeichnis, in dem RRD-Datenbanken gespeichert sind
RRD_DIR="/ data/ www/wwwroot/nginx/rrd";# Verzeichnis, in dem PNG-Bilder präsentiert werden
WWW_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_status
Importieren cacti_graph_template_nginx_clients_stat.xml im Kakteenverwaltungsfenstercacti_graph_template_nginx_sockets_stat.xml16. Häufig gestellte Fragen & Fehlerbehandlung1. Ursachen und Lösungen für 400 fehlerhafte AnforderungsfehlerKonfigurieren 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 Fehlerproxy_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 NginxDieser 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 = 10Mupload_max_filesize = 2M4. 504 Gateway Timeout (nginx) lösen Ich bin beim Aktualisieren des Discuz-Forums auf dieses Problem gestoßenIm 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 KBDas bedeutet, dass der Fastcgi-Puffer auf 8×128k eingestellt wirdWenn 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.org
location / {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.