@andrewshkovskii

Nginx, uwsgi и django — upstream timed out на get/post запросы

Приложение работает нормально (проверял на обычном runserver), но есть проблема с настройкой связки nginx + uwsgi
Конфигурация:

* nginx 1.4.2
* python 2.7.3
* django 1.5.4
* uwsgi 1.9
* OS — debian

Конфигурация uwsgi yaml:
 uwsgi:
      chdir: /var/projects/HOA_desk
      module: HOA_desk.wsgi:application
      env: DJANGO_SETTINGS_MODULE=HOA_desk.settings
      socket: /tmp/HOA_desk.sock
      master: 1
      pidfile: /tmp/HOA_desk.pid
      no-orphans: 1
      processes: 2
      max-requests: 5000
      buffer-size: 32768
      harakiri: 30
      reload-mercy: 8
      vacuum: 1
      daemonize: /var/projects/HOA_desk.log
      touch-reload: /var/projects/HOA_desk/hoa_desk_uwsgi.yaml
      stats: 127.0.0.1:9191
      virtualenv: /var/projects/projects_ve/HOA_desk_ve/ 


nginx.conf

    user www-data;
    worker_processes  1;

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

    events {
        worker_connections  1024;
    }

    http {
        include     mime.types;

        access_log  /var/log/nginx/access.log;

        sendfile        on;

        keepalive_timeout  65;
        tcp_nodelay        on;

        gzip  on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";

        include sites-enabled/*;
    }


nginx application config:

    upstream HOA_desk_django {
        server unix:///tmp/HOA_desk.sock;
    }

    server {
        client_max_body_size 15M;
        listen 80;
        server_name xx.xx-xxxx.xx;
        charset utf-8;
        gzip on;
        expires off;
        access_log /var/projects/HOA_desk_nginx_access.log;
        error_log /var/projects/HOA_desk_nginx_error.log debug;

        location / {
            root /var/projects/HOA_desk;
            uwsgi_pass HOA_desk_django;
            include    uwsgi_params;
        }

        location /static/ {
            add_header X-Static hit;
            autoindex on;
            expires off;
            root /var/projects/HOA_desk/;
        }

        location /uploads/ {
                autoindex on;
                root /var/projects/HOA_desk/;
        }
    }



uwsgi_params:
    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;

    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;

    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_ADDR        $server_addr;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;


uwsgi запускаю с помощью: uwsgi --uid 33 --gid 33 -y %config_file%
Nginx: nginx -c /etc/nginx/nginx.conf

А вот и логи…

uwsgi:

    
** Starting uWSGI 1.9.16 (64bit) on [Tue Sep 17 14:31:51 2013] ***
    compiled with version: 4.4.5 on 17 September 2013 12:35:39
    os: Linux-2.6.26-2-xen-amd64 #1 SMP Thu Nov 25 06:39:26 UTC 2010
    nodename: dstestvoip
    machine: x86_64
    clock source: unix
    detected number of CPU cores: 1
    current working directory: /var/projects
    writing pidfile to /tmp/HOA_desk.pid
    detected binary path: /var/projects/projects_ve/HOA_desk_ve/bin/uwsgi
    !!! no internal routing support, rebuild with pcre support !!!
    uWSGI running as root, you can use --uid/--gid/--chroot options
    setgid() to 33
    setuid() to 33
    your memory page size is 4096 bytes
     *** WARNING: you have enabled harakiri without post buffering. Slow upload could be     
rejected on post-unbuffered webservers ***
    detected max file descriptor number: 1024
    lock engine: pthread robust mutexes
    thunder lock: disabled (you can enable it with --thunder-lock)
    uwsgi socket 0 bound to UNIX address /tmp/HOA_desk.sock fd 3
    Python version: 2.7.3 (default, Nov 19 2012, 09:51:09)  [GCC 4.4.5]
    Set PythonHome to /var/projects/projects_ve/HOA_desk_ve/
    *** Python threads support is disabled. You can enable it with --enable-threads ***
    Python main interpreter initialized at 0x8f6830
    your server socket listen backlog is limited to 100 connections
    your mercy for graceful operations on workers is 60 seconds
    mapped 304392 bytes (297 KB) for 2 cores
    *** Operational MODE: preforking ***
    WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x8f6830 pid: 19656 (default     app)
    *** uWSGI is running in multiple interpreter mode ***
    spawned uWSGI master process (pid: 19656)
    spawned uWSGI worker 1 (pid: 19657, cores: 1)
    spawned uWSGI worker 2 (pid: 19658, cores: 1)
    *** Stats server enabled on 127.0.0.1:9191 fd: 11 ***


Когда пытаюсь достучаться до / в логах nginx:

error log:

    
    2013/09/17 14:17:14 [alert] 19574#0: accept4() failed (38: Function not implemented)
    2013/09/17 14:17:31 [info] 19574#0: *2 client closed connection while waiting for request,    
 client: 77.41.15.118, server: 0.0.0.0:80
    2013/09/17 14:17:31 [info] 19574#0: *3 client closed connection while waiting for request,   
  client: 77.41.15.118, server: 0.0.0.0:80
    2013/09/17 14:17:31 [info] 19574#0: *4 client closed connection while waiting for request, 
client: 77.41.15.118, server: 0.0.0.0:80
    2013/09/17 14:17:31 [info] 19574#0: *5 client closed connection while waiting for request,
 client: 77.41.15.118, server: 0.0.0.0:80
    2013/09/17 14:17:31 [info] 19574#0: *6 client closed connection while waiting for request, 
client: 77.41.15.118, server: 0.0.0.0:80
    2013/09/17 14:18:14 [error] 19574#0: *1 upstream timed out (110: Connection timed out)    
 while reading response header from upstream, client: 77.41.15.118, server: xx.xxx-xxxx.xx,    
 request: "GET / HTTP/1.1$


Access log:

    77.41.15.118 - - [17/Sep/2013:14:18:14 +0400] "GET / HTTP/1.1" 504 584 "-" "Mozilla/5.0    
 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/29.0.1547.65     Safari/537.36"


В логе uwsgi — кроме информации после запуска нет ничего.
Я пытался менять сокет-файл на обычный сокет — все тоже саможе. Где я ошибся в маппинге сокета uwsgi < — nginx? Или же не так настроил nginx?
  • Вопрос задан
  • 5145 просмотров
Решения вопроса 1
@andrewshkovskii Автор вопроса
В общем проблема была в том, что nginx собрался на старом ядре (2010 год..) и без поддержки accept4 как и написано в логах.
Обновил ядро, пересобрал — все заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы