Ich habe Nginx für die Entwicklung von Web-Apps mit Flask + Docker-Compose verwendet. Ich habe die Punkte von Nginx zu dieser Zeit extrahiert und zusammengefasst, insbesondere die Einstellungsdatei: thumbsup_tone3:
Klicken Sie hier für den Artikel der Eltern. ■ Ich habe mit Flask + Docker + Vue.js + AWS eine WebApp für ein Spiel erstellt ...
■ Der Quellcode ist auf Github verfügbar
Gunicorn ** empfiehlt die Verwendung von Nginx auf seiner offiziellen Seite **. https://docs.gunicorn.org/en/stable/deploy.html
Da Nginx standardmäßig gepuffert ist, wird es von langsamen Clients nicht leicht beeinflusst und scheint in der Lage zu sein, Gunicorn-Mitarbeiter effizient zu behandeln. Besonders effektiv, wenn die Anzahl der Mitarbeiter (Anzahl der Sitzungen) begrenzt ist. Der Apache-Server puffert übrigens keine Anfragen. Wenn Sie Gunicorn für WSGI wählen, ist die Kombination von Nginx gut, es sei denn, Sie haben einen bestimmten Grund.
Beginnen wir mit dem Vordergrund. Das Folgende ist der Befehlsteil der Docker-Datei.
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
Docker stoppt den Container, wenn Sie den Befehl nicht im Vordergrund ausführen. Da nginx als Daemon ausgeführt wird, muss es mit "deamon off" gesetzt werden, um im Vordergrund zu arbeiten.
Eine kurze Überprüfung der Konfigurationsdatei.
Schreibverarbeitung für jedes Modul Es gibt vier Module
--core: Module zur Prozesssteuerung, Konfigurationsdateien usw. --event: Modul zur Ereignisverarbeitung --http: Modul im Zusammenhang mit http --mail Modul für Mail
Beschreiben Sie jede Einstellung in einem festen Kontext. Schreiben Sie das Kernmodul in den Hauptkontext. Mit anderen Worten, schreiben Sie es oben in die Einstellungsdatei.
Kernmoduleinstellungen
events {
Einstellungen des Ereignismoduls
}
http {
http-Moduleinstellungen
}
mail {
Mail-Modul-Einstellungen
}
Es ist eine Einstellungsdatei von Nginx, die in der Flask + Gunicon + Docker-Compose-Umgebung erstellt wurde.
user nginx;
worker_processes auto;
#Ereigniskontext: erforderlich
events {
worker_connections 512; #Begrenzung der Anzahl der Verbindungen
}
#http-Kontext: erforderlich
http {
keepalive_timeout 60;
server_tokens off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
server {
listen 80;
server_name nginx_container;
charset UTF-8;
proxy_read_timeout 60s;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
#Bei der In-App-Umleitung wird eine entsprechende Portnummer angegeben
port_in_redirect on;
# docker-Kann durch den Containernamen angegeben werden, da es sich um Netzwerke mit Compose handelt
location / {
proxy_pass http://flask:5000;
}
}
}
Von nun an werde ich jeden Punkt im Detail ansprechen: arrow_down:
worker_processes Sie können die Anzahl der Ausführungsprozesse angeben. Stellen Sie entsprechend der Anzahl der Kerne ein. Wenn Sie auf Auto setzen, wird die optimale Anzahl von Kernen eingestellt. Der Standardwert ist 1.
worker_connections Begrenzt die Anzahl der Verbindungen, die ein Mitarbeiter gleichzeitig verarbeiten kann. Wenn zwei Prozesse und 512 Verbindungen vorhanden sind, können bis zu 1024 Verbindungen gleichzeitig verarbeitet werden. Der Standardwert ist 512.
Es ist der gleiche Wert wie der Standardwert, aber ich habe ihn absichtlich verlassen, weil ich einen anderen Wert in Betracht gezogen habe.
keepalive_timeout Dies ist die Anzahl der Sekunden des Timeouts auf der Serverseite. Der Standardwert ist 75.
server_tokens Legen Sie fest, ob die Nginx-Version in der Fußzeile der Fehlerseite angezeigt werden soll. Es ist nicht erforderlich und sollte aus Sicherheitsgründen entfernt werden. Auf "Aus" stellen.
proxy_set_header Definieren Sie den Header neu, der an den Backend-Server gesendet werden soll.
proxy_redirect Standortheader beim Umleiten des Backend-Servers. Wenn diese Option aktiviert ist, wird proxy_pass als Hostname verwendet. Wenn diese Option deaktiviert ist, wird sie gemäß den Anweisungen des Servers umgeleitet. Da es nicht erforderlich ist, den Hostnamen, der die Containerkonfiguration darstellt, im Speicherortkopf anzugeben, setzen Sie ihn auf "Aus".
port_in_redirect Eine entsprechende Portnummer wird vergeben. Wenn Sie dies bei der Umleitung innerhalb der App nicht festlegen, wird der PORT des App-Containers verwendet. Die Umleitung schlägt jedes Mal fehl, weil der Nginx-Port (80) und der App-Container-Port (5000) unterschiedlich sind. Wenn Sie ridirect mit Flask verwenden möchten, ist diese Einstellung unverzichtbar.
location
Es ist wie folgt mit dem App-Container verbunden, in dem Flask ausgeführt wird.
proxy_pass http://flask:5000;
Dies liegt daran, dass der Kolbencontainer der Verbindungsquelle die folgenden Einstellungen in den Docker-Compose-Einstellungen aufweist.
#Auszug
flask:
build: .
container_name: flask
#Kürzung
networks:
- front
expose:
- 5000
Ich bin über das Front-Netzwerk mit nginx verbunden. Daher können Sie eine Verbindung mit flask
von container_name herstellen. Da PORT im Verbindungscontainer mit "Expose 5000" geöffnet ist, stellen Sie eine Verbindung mit der Portnummer "5000" her.
Es war der Mindestinhalt, aber ich habe immer noch nicht genug gelernt. : Schrei: Wenn Sie Nginx studieren, lernen Sie, wie Sie mit Datenverkehr umgehen und die Last verteilen, sodass dies kostengünstig zu sein scheint. Vielen Dank für das Lesen bis zum Ende. : raise_hands_tone3:
Recommended Posts