[PYTHON] Résumé des paramètres de Nginx (édition Flask + Docker + Gunicorn)

J'ai utilisé Nginx pour le développement d'applications Web avec Flask + docker-compose. J'ai extrait et résumé les points de Nginx à l'époque, en particulier le fichier de paramétrage: thumbsup_tone3:

Cliquez ici pour l'article des parents. ■ J'ai créé une WebApp de jeu avec Flask + Docker + Vue.js + AWS ...

■ Le code source est disponible sur Github

Bonne compatibilité avec Gunicorn

Gunicorn ** recommande d'utiliser Nginx sur sa page officielle **. https://docs.gunicorn.org/en/stable/deploy.html

Comme Nginx est mis en mémoire tampon par défaut, il n'est pas facilement affecté par les clients lents et semble être capable de gérer efficacement les travailleurs Gunicorn. Particulièrement efficace lorsque le nombre de travailleurs (nombre de sessions) est limité. Au fait, le serveur Apache ne met pas en mémoire tampon les requêtes. Sauf si vous avez une raison spécifique, si vous choisissez Gunicorn pour WSGI, la combinaison de Nginx est bonne.

Précautions lors de l'exécution avec Docker

Commençons par le premier plan. Ce qui suit est la partie commande du Dockerfile.


CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]

docker arrêtera le conteneur si vous n'exécutez pas la commande au premier plan. Puisque nginx s'exécute en tant que démon, il doit être défini avec deamon off pour fonctionner au premier plan.

Consultez rapidement le fichier de paramètres

Un examen rapide du fichier de configuration.

Traitement d'écriture pour chaque module Il y a quatre modules

--core: modules liés au contrôle de processus, aux fichiers de configuration, etc. --event: Module lié au traitement des événements --http: Module lié à http --Module de messagerie lié au courrier

Décrivez chaque paramètre dans un contexte fixe. Écrivez le module principal dans le contexte principal. En d'autres termes, écrivez-le en haut du fichier de paramètres.

paramètres du module principal

events {
paramètres du module d'événement
}

http {
Paramètres du module http
}

mail {
paramètres du module de messagerie
}

Fichier de configuration (nginx.conf)

Il s'agit d'un fichier de configuration de Nginx intégré à l'environnement Flask + Gunicon + docker-compose.


user  nginx;
worker_processes  auto;

#contexte d'événements: obligatoire
events {
    worker_connections 512; #Limiter le nombre de connexions
}

#Contexte http: obligatoire
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;
            #Nécessaire, un numéro de port approprié sera donné lors de la redirection dans l'application
            port_in_redirect on;

            # docker-Peut être spécifié par le nom du conteneur car il s'agit de réseaux avec composer
            location / {
                proxy_pass http://flask:5000;
            }

    }
}

À partir de maintenant, j'aborderai chaque point en détail: arrow_down:

module de base

worker_processes Vous pouvez spécifier le nombre de processus d'exécution. Réglez en fonction du nombre de cœurs. Si vous le réglez sur auto, il définira le nombre optimal de cœurs. La valeur par défaut est 1.

module événements

worker_connections Limite le nombre de connexions qu'un collaborateur peut gérer en même temps. S'il y a deux processus et 512 connexions, c'est un calcul qui peut traiter jusqu'à 1024 connexions en même temps. La valeur par défaut est 512.

C'est la même valeur que la valeur par défaut, mais je l'ai laissée intentionnellement parce que je considérais une autre valeur.

module http

keepalive_timeout Il s'agit du nombre de secondes d'expiration du délai côté serveur. La valeur par défaut est 75.

server_tokens Définissez s'il faut afficher la version Nginx dans le pied de page de la page d'erreur. Il est inutile et doit être supprimé pour des raisons de sécurité. ʻOff`.

proxy_set_header Redéfinissez l'en-tête à envoyer au serveur principal.

proxy_redirect En-tête d'emplacement lors de la redirection du serveur principal. Si cette option est activée, proxy_pass est utilisé comme nom d'hôte, et si elle est désactivée, redirige comme indiqué par le serveur. Puisqu'il n'est pas nécessaire d'exposer le nom d'hôte qui est la configuration du conteneur dans l'en-tête d'emplacement, définissez-le sur ʻoff`.

port_in_redirect Un numéro de port approprié sera attribué. Si vous ne le définissez pas lors de la redirection dans l'application, le PORT du conteneur d'application sera utilisé. La redirection échoue à chaque fois car le port Nginx (80) et le port du conteneur App (5000) sont différents. Si vous souhaitez utiliser ridirect avec Flask, ce paramètre est indispensable.

location Il est connecté au conteneur d'applications exécutant Flask comme suit. proxy_pass http://flask:5000;

Cela est dû au fait que le conteneur flask de la source de connexion a les paramètres suivants dans les paramètres de docker-compose.

#Extrait

flask:
    build: .
    container_name: flask

    #réduction

    networks:
      - front
    expose:
      - 5000

Je suis connecté à nginx via le réseau frontal. Par conséquent, vous pouvez vous connecter avec flask de nom_conteneur. De plus, puisque PORT est ouvert dans le conteneur de connexion avec «exposer 5000», connectez le numéro de port avec «5000».

en conclusion

C'était le contenu minimum, mais je n'ai pas encore suffisamment étudié. : crier: Si vous étudiez Nginx, vous apprendrez à gérer le trafic et à répartir la charge, ce qui semble être rentable. Merci d'avoir lu jusqu'au bout. : lift_hands_tone3:

Recommended Posts

Résumé des paramètres de Nginx (édition Flask + Docker + Gunicorn)
[Avec diagramme d'image] Nginx + gunicorn + Flask converti en Docker [Partie 2]
[Avec diagramme d'image] Nginx + gunicorn + Flask converti en Docker [Partie 1]
Flacon + Gunicorn + Nginx + Supervisor jusqu'à ce que cela fonctionne
Conversion de l'environnement Django en Docker (Docker + Django + Gunicorn + nginx) Partie 2
Exécutez Flask sur CentOS avec python3.4, Gunicorn + Nginx.
Résumé de la commande Docker
Utilisation de Flask avec la configuration Nginx + gunicorn [Environnement local]
Conversion de l'environnement Django en Docker (Docker + Django + Gunicorn + nginx) Partie 3
Journal de sortie vers la console avec Flask + Nginx sur Docker
Lancer une application Web Python sur Nginx + Gunicorn avec Docker
Page de résumé de l'article Flask
Résumé de l'image Jupyter Docker