Beispielcode für Nginx zur Erreichung dynamischer und statischer Trennung

Beispielcode für Nginx zur Erreichung dynamischer und statischer Trennung

1. Einfache Konfiguration der dynamischen und statischen Trennung von Nginx

Angenommen, web1 ist ein statischer Server, web2 ist ein dynamischer Server und node2 ist ein Proxy

1.1 Nach Verzeichnis trennen

web1 verarbeitet nur statische Anfragen

[root@web1 ~]# mkdir -p /var/www/www/image
[root@web1 ~]# yum -y installiere lrzsz
[root@web1 ~]# cd /var/www/www/image/
[root@web1 Bild]# rz
[root@web1 Bild]# ll
-rw-r--r--. 1 root root 156848 13. März 11:31 nhrzyx.png
[root@web2 ~]# vim /etc/httpd/conf/httpd.conf 
 Dokumentstammverzeichnis "/var/www/www"
[root@web2 ~]# systemctl restart httpd

Web2 verarbeitet nur dynamische Anfragen

[root@web2 ~]# mkdir -p /var/www/www/dynamic
[root@web2 ~]# echo dynamic10 > /var/www/www/dynamic/index.html
[root@web2 ~]# vim /etc/httpd/conf/httpd.conf 
 Dokumentstammverzeichnis "/var/www/www"
[root@web2 ~]# systemctl restart httpd

Zugangstest

http://172.25.254.134/image/nhrzyx.png

http://172.25.254.135/dynamic/index.html

1.2 Trennung auf Verlangen

Konfigurieren des Proxys

[root@lb01 conf]# vim nginx.conf
Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Stackpools {
    Server 172.25.254.134:80 Gewicht=5;
}
Upstream dynamische_Pools {
    Server 172.25.254.135:80 Gewicht=5;
}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
      Stamm-HTML;
      Index Index.html Index.htm;
      Proxy_Set_Header Host $host;
      Proxy-Passwort http://dynamische_Pools;
    }
    Standort /Bild/ {
      Proxy_Set_Header Host $host;
    Proxy-Passwort http://stack_pools;
    }
    Standort /dynamisch/ {
      Proxy_Set_Header Host $host;
    Proxy-Passwort http://dynamische_Pools;
    }
  }
}
[root@lb01 conf]# nginx -s neu laden

Konfigurieren Sie Hosts und testen Sie den Browserzugriff

172.25.254.131 www.lbtest.com

http://www.lbtest.com/image/nhrzyx.png

http://www.lbtest.com/dynamic/

1.3 Trennung durch Erweiterung

[root@lb01 conf]# vim nginx.conf

Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Stackpools {
    Server 172.25.254.134:80 Gewicht=5;
}
Upstream dynamische_Pools {
    Server 172.25.254.135:80 Gewicht=5;
}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
      Stamm-HTML;
      Index Index.html Index.htm;
      Proxy_Set_Header Host $host;
      Proxy-Passwort http://dynamische_Pools;
    }
    Standort ~ .*.(jpg|png|gif|css|js|swf|bmp|jsp|php|asp)$ {
    Proxy_Set_Header Host $host;
    Proxy-Passwort http://stack_pools;
    }
  }
}
[root@lb01 conf]# nginx -s neu laden

http://www.lbtest.com/image/nhrzyx.png  

1.4 Trennung aufgrund der Kundenidentifikation

http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Stackpools {
    Server 172.25.254.134:80 Gewicht=5;
}
Upstream dynamische_Pools {
    Server 172.25.254.135:80 Gewicht=5;
}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
        wenn ($http_user_agent ~* "MSIE")
        {
            Proxy-Passwort http://dynamische_Pools;
        }
        wenn ($http_user_agent ~* "Firefox")
        {
            Proxy-Passwort http://stack_pools;
        }
    }
    Proxy_Set_Header Host $host;
    }
}
[root@web1 Bild]# echo stack_web>> /var/www/www/test.html
[root@web1-Bild]# systemctl restart httpd

[root@web2 ~]# echo dynamic_web>>/var/www/www/test.html
[root@web2 ~]# systemctl restart httpd

Verwenden Sie die Browser IE und Firefox für den Zugriff

http://www.lbtest.com/test.html

1.5 Trennung von Client-PC und Mobilgerät nutzen

http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Stackpools {
    Server 172.25.254.134:80 Gewicht=5;
}
Upstream dynamische_Pools {
    Server 172.25.254.135:80 Gewicht=5;
}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
        wenn ($http_user_agent ~* "iphone")
        {
            Proxy-Passwort http://dynamische_Pools;
        }
        wenn ($http_user_agent ~* "android")
        {
            Proxy-Passwort http://stack_pools;
        }
    }
    Proxy_Set_Header Host $host;
    }
}

Greifen Sie per Android und iPhone auf den Test zu

http://www.lbtest.com/test.html

2. Optimierung

[root@node2 ~]# vim /etc/sysctl.conf

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 4000 65000
net.ipv4.tcp_max_syn_backlog = 16348
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_max_orphans = 16384
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 18364

[root@node2 ~]# sysctl -p

Eine kurze Einführung in Keepalive und Nginx

Konfigurieren Sie Keepalived, um eine hohe Verfügbarkeit des Nginx-Lastausgleichs zu erreichen

Keepalive eignet sich besser zum Erkennen von IP-Drift. Wenn der Ressourcendienst gesteuert wird, ist Heartbeat besser geeignet, z. B. bei hoher Verfügbarkeit in Speicherrichtung.

3. Integritätsprüfung des Nginx-Reverse-Proxys

Wenn nginx als Reverse-Proxy fungiert und der Backend-Server ausfällt, kann ngixn diesen Realserver nicht aus dem Upstream entfernen und leitet die Anfrage daher an den Backend-Realserver weiter. Obwohl nginx proxy_next_upstream in localtion aktivieren kann, um die an den Kunden zurückgegebene Fehlerseite zu beheben, leitet dies die Anfrage dennoch an diesen Server weiter und dann an andere Server, wodurch eine Weiterleitung verschwendet wird. Mithilfe des vom Taobao-Team entwickelten nginx-Moduls nginx_upstream_check_module, das den Gesundheitszustand des Backend-Realservers erkennt, werden alle Anfragen nicht an diesen Server weitergeleitet, wenn der Backend-Server nicht verfügbar ist

Prüfintervall = 5000 Anstieg = 1 Abfall = 3 Timeout = 4000;

3.1 Direkt zur Konfigurationsdatei hinzufügen

[root@node2 ~]# vim /usr/local/nginx/conf/nginx.conf

Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Webpools {
    Server 172.25.254.134:80 Gewicht=5;
    Server 172.25.254.135:80 Gewicht=5;
# Server 172.25.254.158:80 Gewicht=5 Backup;
Prüfintervall = 5000 Anstieg = 1 Abfall = 3 Timeout = 4000;

}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
      #Wurzel-HTML;
      # index.html index.htm;
      Proxy_Set_Header Host $host;
      Proxy-Passwort http://Webpools;
    }
  }
}

[root@node2 ~]# nginx -t

nginx: [emerg] unbekannte Anweisung „check“ in /usr/local/nginx/conf/nginx.conf:14
nginx: Test der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf fehlgeschlagen

Fehler überprüfen

Laden Sie das Nginx-Modul https://github.com/yaoweibin/nginx_upstream_check_module herunter, verwenden Sie Nginx, um das Modul zu installieren, und behandeln Sie es als Nginx-Upgrade.

3.2 Download-Modul

[root@node2 nginx-1.12.2]# yum -y installiere git

[root@node2 nginx-1.12.2]# git clone https://github.com/yaoweibin/nginx_upstream_check_module.git

[root@node2 nginx-1.12.2]# ll
drwxr-xr-x. 7 root root 4096 13. April 00:57 nginx_upstream_check_module
[root@node2 nginx-1.12.2]# cd nginx_upstream_check_module/

[root@node2 nginx_upstream_check_module]# ll
-rw-r--r--. 1 root root 0 Apr 13 00:57 ÄNDERUNGEN
-rw-r--r--. 1 root root 7921 Apr 13 00:57 check_1.11.1+.patch
-rw-r--r--. 1 root root 8330 13. April 00:57 check_1.11.5+.patch
-rw-r--r--. 1 root root 8060 13. April 00:57 check_1.12.1+.patch
-rw-r--r--. 1 root root 8054 13. April 00:57 check_1.14.0+.patch
-rw-r--r--. 1 root root 5483 13. April 00:57 check_1.2.1.patch
-rw-r--r--. 1 root root 7130 Apr 13 00:57 check_1.2.2+.patch
-rw-r--r--. 1 root root 7094 13. April 00:57 check_1.2.6+.patch
-rw-r--r--. 1 root root 6791 13. April 00:57 check_1.5.12+.patch
-rw-r--r--. 1 root root 8295 13. April 00:57 check_1.7.2+.patch
-rw-r--r--. 1 root root 8346 13. April 00:57 check_1.7.5+.patch
-rw-r--r--. 1 root root 8509 13. April 00:57 check_1.9.2+.patch
-rw-r--r--. 1 root root 6943 13. April 00:57 check.patch
-rw-r--r--. 1 root root 749 Apr 13 00:57 konfiguration
drwxr-xr-x. 2 root root 43 Apr 13 00:57 doc
-rw-r--r--. 1 root root 1709 Apr 13 00:57 nginx-sticky-module.patch
drwxr-xr-x. 2 root root 29 Apr 13 00:57 nginx-tests
-rw-r--r--. 1 root root 112010 Apr 13 00:57 ngx_http_upstream_check_module.c
-rw-r--r--. 1 root root 529 13. April 00:57 ngx_http_upstream_check_module.h
-rw-r--r--. 1 root root 2848 13. April 00:57 ngx_http_upstream_jvm_route_module.patch
-rw-r--r--. 1 root root 11509 Apr 13 00:57 README
drwxr-xr-x. 6 root root 79 Apr 13 00:57 test
-rw-r--r--. 1 root root 3342 Apr 13 00:57 upstream_fair.patch
drwxr-xr-x. 2 root root 81 Apr 13 00:57 util

3.3 Patchen

[root@node2 nginx_upstream_check_module]# cd ../

[root@node2 nginx-1.12.2]# yum -y Patch installieren

Hinweis: Aufgrund der Aktualisierung der Nginx-Version lautet der Patch für Nginx-Version 1.12 und höher check_1.11.5+.patch

[root@node2 nginx-1.12.2]# patch -p0 < ./nginx_upstream_check_module/check_1.11.5+.patch

Patchdatei src/http/modules/ngx_http_upstream_hash_module.c
Patchdatei src/http/modules/ngx_http_upstream_ip_hash_module.c
Patchdatei src/http/modules/ngx_http_upstream_least_conn_module.c
Patchdatei src/http/ngx_http_upstream_round_robin.c
Patchdatei src/http/ngx_http_upstream_round_robin.h

3.4 Kompilieren und installieren

[root@node2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx \
> --Benutzer=nginx --Gruppe=nginx \
> --mit-http_ssl_module \
> --mit-http_realip_module \
> --mit-http_addition_module \
> --mit-http_gzip_static_module \
> --mit-http_stub_status_module \
> --mit-http_sub_module \
> --mit-pcre \
> --add-module=./nginx_upstream_check_module

Ein neues Verzeichnis mit dem Namen „objs“ wird angezeigt.

[root@node2 nginx-1.12.2]# ll

drwxr-xr-x. 4 root root 187 Apr 13 01:04 objs

[root@node2 nginx-1.12.2]# make

sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
  -e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
  -e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
  -e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
  < man/nginx.8 > objs/nginx.8
make[1]: Verlasse das Verzeichnis `/usr/local/src/nginx-1.12.2'

[root@node2 nginx-1.12.2]# ll objs/

drwxr-xr-x. 3 root root 41 Apr 13 01:04 addon
-rw-r--r--. 1 root root 16895 Apr 13 01:04 autoconf.err
-rw-r--r--. 1 root root 42396 13. April 01:04 Makefile
-rwxr-xr-x. 1 root root 5993600 13. April 01:06 nginx #nginx neue ausführbare Datei -rw-r--r--. 1 root root 5341 13. April 01:06 nginx.8
-rw-r--r--. 1 root root 7202 13. April 01:04 ngx_auto_config.h
-rw-r--r--. 1 root root 657 13. April 01:03 ngx_auto_headers.h
-rw-r--r--. 1 root root 6412 13. April 01:04 ngx_modules.c
-rw-r--r--. 1 root root 87120 13. April 01:06 ngx_modules.o
drwxr-xr-x. 9 root root 91 3. April 22:38 src

Sichern Sie nginx und kopieren Sie das neue nginx

[root@node2 nginx-1.12.2]# cd /usr/local/nginx/sbin/

[root@node2 sbin]# mv nginx nginx.bak

[root@node2 sbin]# cp /usr/local/src/nginx-1.12.2/objs/nginx /usr/local/nginx/sbin

[root@node2 sbin]# /usr/local/nginx/sbin/nginx -s stoppen

nginx: [emerg] getpwnam("nginx") ist fehlgeschlagen

[root@node2 sbin]# ID nginx

ID: nginx: kein solcher Benutzer

[root@node2 sbin]# Benutzeradd nginx

[root@node2 sbin]# ID nginx

uid=1002(nginx) gid=1002(nginx) Gruppen=1002(nginx)

[root@node2 sbin]# /usr/local/nginx/sbin/nginx -s stoppen

[root@node2 sbin]# /usr/local/nginx/sbin/nginx

[root@node2 ~]# nginx -t

nginx: die Syntax der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist in Ordnung
nginx: Test der Konfigurationsdatei /usr/local/nginx/conf/nginx.conf ist erfolgreich

Erfolgreiche Installation

3.5 Konfiguration

Arbeiterprozesse 1;
Ereignisse {
  Arbeiterverbindungen 1024;
}
http {
  mime.types einschließen;
  Standardtyp Anwendung/Oktett-Stream;
  sendfile an;
  KeepAlive-Timeout 65;
Upstream-Webpools {
    Server 172.25.254.134:80 Gewicht=5;
    Server 172.25.254.135:80 Gewicht=5;
# Server 172.25.254.158:80 Gewicht=5 Backup;
Prüfintervall = 5000 Anstieg = 1 Abfall = 3 Timeout = 4000;

}
  Server {
    hören Sie 80;
    Servername www.lbtest.com;
    Standort / {
      Proxy_Set_Header Host $host;
      Proxy-Passwort http://Webpools;
    }
    Standort /nstatus{
    Status prüfen;
    Zugriff_Abmeldung;
    }
  }
}
[root@node2 conf]# nginx -s neu laden

3.6 Zugangstest

Beide Zustände sind normal

Schalten Sie einen aus

[root@web1-Bild]# systemctl stop httpd 

Schalten Sie beide

[root@web2 ~]# systemctl stop httpd 

Öffnen Sie ein

[root@web1 image]# systemctl start httpd 

[root@web2 ~]# systemctl restart httpd 

Backend-Check-Funktion erfolgreich implementiert

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Grundlegendes Konfigurationsbeispiel von Nginx mit Apache oder Tomcat zur dynamischen und statischen Trennung
  • Verwenden von Nginx+uWsgi zum Trennen der dynamischen und statischen Teile der Django-Framework-Site von Python
  • Einfache Implementierung des Nginx+Tomcat-Reverse-Proxys und der dynamischen und statischen Trennung
  • Detaillierte Erklärung von Nginx zum Trennen von statischem und dynamischem Tomcat
  • nginx realisiert Lastausgleich und dynamische und statische Trennung
  • Nginx-Beispielcode zur Implementierung dynamischer und statischer Trennung
  • Detailliertes Beispiel für die Bereitstellung der dynamischen und statischen Trennung von Nginx+Apache
  • Nginx implementiert dynamische und statische Trennung Beispielerklärung
  • Implementierungsfallcodeanalyse für dynamische und statische Trennung von Nginx
  • Detaillierte Erläuterung des Prozesses zur Realisierung der dynamischen und statischen Trennung in Springmvc nginx
  • Docker Nginx-Container und Tomcat-Container zur Realisierung von Lastausgleich und dynamischen und statischen Trennungsvorgängen
  • Analyse des Prinzips von Nginx + Tomcat zur Erreichung eines Lastausgleichs sowie einer dynamischen und statischen Trennung
  • Das Prinzip und die Konfiguration des Nginx-Lastausgleichs sowie der dynamischen und statischen Trennung
  • Beispiel, wie nginx dynamische und statische Trennung implementiert
  • Detaillierte Anleitung für nginx von der Installation bis zur Konfiguration (Installation, Sicherheitskonfiguration, Anti-Hotlinking, dynamische und statische Trennung, HTTPS-Konfiguration, Leistungsoptimierung)
  • Implementierung des Nginx+Tomcat-Lastausgleichs und der dynamischen und statischen Clustertrennung
  • Server-Lastausgleich von Nginx + Tomcat zur Erzielung einer dynamischen und statischen Trennung
  • Implementierung und Beschreibung der dynamischen und statischen Trennungskonfiguration von Nginx

<<:  Eine kurze Einführung in den MySQL-Dialekt

>>:  Schritt-für-Schritt-Anleitung zum Erstellen einer Kalenderkomponente mit React

Artikel empfehlen

React-Internationalisierung react-i18next ausführliche Erklärung

Einführung react-i18next ist ein leistungsstarkes...

Zusammenfassung der Tipps zum Erstellen von Webseiten

Vorwort Dieser Artikel fasst hauptsächlich einige...

So schreiben Sie eleganten JS-Code

Inhaltsverzeichnis Variable Verwenden Sie aussage...

Detaillierte Erklärung des Missverständnisses zwischen MySQL und Oracle

Inhaltsverzeichnis Wesentlicher Unterschied Daten...

Fehlerbehebung bei der Ursache des 502 Bad Gateway-Fehlers auf dem Nginx-Server

Der Server meldet einen Fehler 502 beim Synchroni...

Detaillierte Erklärung einer Methode zum Umbenennen von Prozeduren in MySQL

Kürzlich habe ich die Funktion zum Umbenennen ges...

Detaillierte Erläuterung der logischen Architektur von MySQL

1. Gesamtarchitekturdiagramm Im Vergleich zu ande...

Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff

Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...

Kopieren und Einfügen ist der Feind der Verpackung

Bevor wir über OO, Entwurfsmuster und die vielen o...

Detaillierte Analyse des HTTP-Statuscodes 502 des Dienstes nginx+php-fpm

Bei einem unserer Webprojekte ist aufgrund der Zu...

Zusammenfassung der Javascript-Datumstools

lass Utils = { /** * Ist es das Todesjahr? * @ret...

Detaillierte Erklärung des Hash-Jump-Prinzips von Vue

Inhaltsverzeichnis Der Unterschied zwischen Hash ...