Python-Servereinstellungen (Nginx + Gunicorn)

Ich habe es 2014 nachgeschlagen und persönlich gesagt, dass dies die Python-API-Servereinstellung ist.

Legen Sie Nginx auf die Vorderseite und verwenden Sie gunicorn, damit der Anwendungsserver den Proxy umkehrt.

Es ist ein bisschen alt, aber ich habe mich dafür entschieden, indem ich mich auf Instagram bezog. INSTAGRAM ENGINEERING

Ein Memo bei der Einstellung auf AWS EC2.

Installieren Sie das Gunicorn

Installiert mit pip auf virtualenv. Ich benutze virtualenv, weil ich es nicht mag, wenn ich beim Spielen mit Python unter dem Betriebssystem hängen bleibe, und ich möchte die Version von Python erhöhen.

Starten Sie Gunicorn beim Start

Ich bin nicht sehr vertraut damit, aber ich habe mich für den Emporkömmling registriert.

Beschreiben Sie die folgende Einstellungsdatei.

/etc/init/myapp.conf


description "[APP NAME] API Server"
 
start on runlevel [2345]
stop on runlevel [016]
 
respawn
 
script
su - www
/home/www/[APP NAME]/virtualenv/bin/gunicorn -b 127.0.0.1:8000 -w 4 -u www --chdir /home/www/[APP NAME]/server/python --log-file /home/www/[APP NAME]/logs/error_log --pythonpath /home/www/[APP NAME]/server/python server:application
end script

Zum Zeitpunkt von centos7 ist der Upstart nicht enthalten. Setzen Sie ihn daher auf systemctl. Sie finden es auf der Gunicorn-Website, einschließlich der Konfigurationsdatei.

Referenz: Bereitstellen der Dokumentation zu Gunicorn --Gunicorn 19.3.0

Nginx-Installation

Installieren Sie mit yum.

Nginx-Konfigurationsdatei.

/etc/nginx/nginx.conf


user  www;
worker_processes  1;

error_log  /var/log/nginx/error.log;

pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    sendfile        on;

    keepalive_timeout  65;

    include /etc/nginx/conf.d/*.conf;

    index   index.html;

    upstream app_server {
        server 127.0.0.1:8000 fail_timeout=0;
    }

    server {
        listen       80;
        server_name  [DOMAIN];
        root         /home/www/[APP NAME]/server/html;

        access_log  /var/log/nginx/[APP NAME].access.log  main;

        location / {
            try_files $uri @proxy_to_app;
        }

        location @proxy_to_app {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            proxy_pass   http://app_server;
        }

        error_page  404              /404.html;
        location = /40x.html {
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        }

    }

}

Die Haupteinstellungen sind die folgenden zwei.

Recommended Posts

Python-Servereinstellungen (Nginx + Gunicorn)
Probieren Sie den Taxii-Server aus (3.gunicorn-Einstellungen)
Python-Umgebungseinstellungen
Aufbau des Python-Ausführungsservers (Python + uWSGI + Django + Nginx)
Führen Sie den Python-WSGI-Server auf der NGINX-Einheit aus
Führen Sie Flask unter CentOS mit Python3.4, Gunicorn + Nginx aus.
python> udp> echo server
DNS-Server in Python ....
Lokaler Server mit Python
Starten Sie mit Docker eine Python-Webanwendung auf Nginx + Gunicorn
Einfacher HTTP-Server mit Python
Einfacher HTTP-Server für Python
Snippet-Einstellungen für Python Jupyter Notebook
Installieren Sie Python 3 auf dem Sakura-Server (FreeBSD)
Schreiben Sie einen HTTP / 2-Server in Python
Emacs-Einstellungen für die Python-Entwicklungsumgebung
Verhalten von Python3 durch Sakuras Server