Я видел две стратегии для размещения приложения django с gunicorn и nginx.
Одна стратегия заключается в том, чтобы запускать пушки в сетевом порту. Например (из http://goodcode.io/blog/django-nginx-gunicorn/):
location / {
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://localhost:8000/;
}
Другая стратегия - связать gunicorn с UNIX-сокетом при запуске (например, http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/)
upstream hello_app_server {
server unix:/tmp/gunicorn.sock fail_timeout=0;
}
...
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://hello_app_server;
break;
}
}
Мысли о том, какая стратегия превосходит? Какие-либо комментарии относительно надлежащего способа сделать каждый? Я склоняюсь к подходу к сокету из-за накладных расходов, которые, как я полагаю, вводится TCP. Меня больше всего беспокоят различия в заголовках, таймаутах подключения и т.д. Между примерами реализации, которые я видел.