В основном следуя инструкциям на https://tutos.readthedocs.io/en/latest/source/ndg.html, Я запустил стек nginx-gunicorn-django, и он надежно работает уже несколько недель.Глядя на то, как добавить что-то (загруженные пользователем медиа-файлы), я посмотрел на свою конфигурацию nginx, и похоже, что я не отредактировал в ней никаких упоминаний об огнестрельном оружии.Я хотел бы понять, что происходит, прежде чем вносить более сложные изменения.Как nginx может пересылать запросы в gunicorn, если в дереве каталогов конфигурации nginx нет упоминаний о gunicorn?
Мой основной файл конфигурации nginx выглядит следующим образом, который, по моему мнению, является значением по умолчанию для установки:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
и мой сценарий запуска gunicorn:
#!/bin/bash
# Based on an example from https://tutos.readthedocs.io/en/latest/source/ndg.html
NAME="makers" # Name of the application (*)
DJANGODIR=/var/www/makers # Django project directory (*)
SOCKFILE=/var/www/makers/run/gunicorn.sock # we will communicate using this unix socket (*)
USER=nginx # the user to run as (*)
GROUP=webdata # the group to run as (*)
NUM_WORKERS=1 # how many worker processes should Gunicorn spawn (*)
DJANGO_SETTINGS_MODULE=makers.settings # which settings file should Django use (*)
DJANGO_WSGI_MODULE=makers.wsgi # WSGI module name (*)
echo "Starting $NAME as `whoami`"
# Activate the virtual environment
cd $DJANGODIR
source /var/www/makers_venv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Start your Django Unicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /var/www/makers_venv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user $USER \
--bind 0.0.0.0:8000
# --bind=unix:$SOCKFILE