title: gevent-socketio nginx uwsgi not working together on development server
body: <p>I am running a django project that uses gevent-socketio. </p>
  
  <p>For some reason on my development server, all my websockets requests are returning a <code>101 pending</code> message at which socketio will start cycling through all the other protocols which result in a <code>pending</code> status.</p>
  
  <p>The error in my uwsgi logs is:</p>
  
  <pre><code>2013/05/23 16:09:08 [error] 14485#0: *85 upstream timed out (110: Connection timed out) while reading upstream, client: x.x.x.x, server: dev.proj.co, request: "GET /socket.io/1/xhr-polling/116404981619?t=1369325348489 HTTP/1.1", upstream: "http://127.0.0.1:4042/socket.io/1/xhr-polling/116404981619?t=1369325348489", host: "dev.proj.co", referrer: "http://dev.proj.co/map/bycon/"
  </code></pre>
  
  <p>Locally, I do not have this problem. I start the server using <code>python run.py</code></p>
  
  <p><strong>run.py on my local environment</strong></p>
  
  <pre><code>#!/usr/bin/env python
  import os
  import sys
  
  from gevent import monkey
  monkey.patch_all()
  
  import django.core.handlers.wsgi
  from socketio.server import SocketIOServer
  
  import os
  
  PORT = 8000
  
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings")
  application = django.core.handlers.wsgi.WSGIHandler()
  PROJECT_DIR            = os.path.realpath(os.path.dirname(__file__))
  sys.path.insert(0, PROJECT_DIR)
  sys.path.insert(0, os.path.join(PROJECT_DIR, "chat"))
  
  if __name__ == '__main__':
      SocketIOServer(('', PORT), application, resource="socket.io").serve_forever()
  </code></pre>
  
  <p>On my <em>development server</em>, where the bug is occurring, I have the following settings:</p>
  
  <p><strong>nginx.conf</strong></p>
  
  <pre><code>worker_processes  auto;
  
  events {
      worker_connections  1024;
  }
  
  http {
      include       mime.types;
      default_type  application/octet-stream;
      sendfile        on;
      keepalive_timeout  65;
  
      gzip  on;
      upstream django {
          server 127.0.0.1:4042;
      }
  
  
      server {
          listen       80;
          server_name dev.proj.co;
          charset utf-8;
  
          access_log  /var/log/nginx/myproj_dev.access.log;
          error_log  /var/log/nginx/myproj_dev.error.log;
  
          location /media/ {
              alias /var/www/dev/myproj/releases/myproj_public/media/;
              error_page 404 = /404;
              expires 30d;
          }
  
          location /static/ {
              alias /var/www/dev/myproj/releases/myproj_public/static/;
              error_page 404 = /404;
              expires 30d;
          }
          location / {
              proxy_pass http://127.0.0.1:4042;
              proxy_http_version 1.1;
              proxy_set_header Upgrade $http_upgrade;
              proxy_set_header Connection "upgrade";
          }
      }
  }
  </code></pre>
  
  <p><strong>uwsgi_dev.ini</strong></p>
  
  <pre><code>[uwsgi]
  
  if-env = PROJECT_HOME
  print = Your path is %(_)/current
  chdir = %(_)/current
  touch-reload = %(_)/current/myproj/uwsgi_dev.ini
  daemonize = %(_)/myproj_uwsgi/myproj.log
  endif =
  
  if-env = VIRTUAL_ENV
  print = Your virtualenv is %(_)
  virtualenv = %(_)
  endif = 
  
  gevent = 100
  processes = 4
  module = myproj.wsgi_dev
  env = DJANGO_SETTINGS_MODULE=myproj.settings.dev
  master = True
  vacuum = True
  max-requests = 5000
  logdate = True
  
  # newrelic requirements
  enable-threads = True
  single-interpreter = True
  </code></pre>
  
  <p><strong>wsgi_dev.py</strong></p>
  
  <pre><code>import os
  
  from gevent import monkey
  monkey.patch_all()
  
  from socketio.server import SocketIOServer
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings")
  from django.core.wsgi import get_wsgi_application
  application = get_wsgi_application()
  
  PORT = 4042
  SocketIOServer(("127.0.0.1", PORT), application, \
          resource="socket.io").serve_forever()
  </code></pre>
  
  <p>Other info:</p>
  
  <pre><code>I'm using uwsgi 1.9.6, gevent-websocket 0.3.6, greenlet 0.4.0 and the dev version of gevent(-e git://github.com/surfly/gevent.git@e2f51c1358e88b60e45d1daf8ee263da64066576#egg=gevent-dev) and gevent-socketetio (-e git://github.com/abourget/gevent-socketio.git@aeece7038b0052ddf6b4228857e4d7a67a6242f2#egg=gevent_socketio-dev)
  
  [root@li476-12 ~]# nginx -v
  nginx version: nginx/1.4.1
  </code></pre>