[PYTHON] Zusammenfassung der Nginx-Einstellungen (Flask + Docker + Gunicorn Edition)

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

Gute Kompatibilität mit Gunicorn

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.

Vorsichtsmaßnahmen beim Ausführen mit Docker

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.

Überprüfen Sie schnell die Einstellungsdatei

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
}

Konfigurationsdatei (nginx.conf)

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:

Kern Modul

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.

Ereignismodul

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.

http-Modul

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.

abschließend

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

Zusammenfassung der Nginx-Einstellungen (Flask + Docker + Gunicorn Edition)
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 2]
[Mit Bilddiagramm] Nginx + Gunicorn + Flask konvertiert zu Docker [Teil 1]
Flasche + Gunicorn + Nginx + Supervisor Bis es funktioniert
Konvertieren der Django-Umgebung in Docker (Docker + Django + Gunicorn + Nginx) Teil 2
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
Docker-Befehlsübersicht
Verwenden der Flasche mit Nginx + Gunicorn-Konfiguration [Lokale Umgebung]
Konvertieren der Django-Umgebung in Docker (Docker + Django + Gunicorn + Nginx) Teil 3
Ausgabeprotokoll an die Konsole mit Flask + Nginx auf Docker
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Kolbenartikel-Zusammenfassungsseite
Jupyter Docker Bildzusammenfassung