1

I have my django app setup on a gunicorn server that is being proxied by nginx(also used for static files), and nginx is "intercepting" the GET request with the credentials code from Google! Why is nginx stealing the request instead of passing it to gunicorn to be processed?

here is my api info for my web application:

Client ID:  
67490467925-v76j4e7bcdrps3ve37q41bnrtjm3jclj.apps.googleusercontent.com
Email address:  
67490467925-v76j4e7bcdrps3ve37q41bnrtjm3jclj@developer.gserviceaccount.com
Client secret:  
XquTw495rlwsHOodhWk
Redirect URIs:  http://www.quickerhub.com
JavaScript origins: https://www.quickerhub.com

and here is the perfect GET request being stolen by nginx:

http://www.quickerhub.com/?code=4/bzqKIpj3UA3bBiyJfQzi3svzPBLZ.QoB_rXWZ6hUbmmS0T3UFEsPMOFF4fwI

and of course sweet nginx is giving me the "Welcome to nginx!" page...

Is there a way to tell nginx to pass these requests on to gunicorn? Or am I doing something incorrectly?

Thanks!

NGINX vhost config:

upstream interest_app_server {
  # fail_timeout=0 means we always retry an upstream even if it failed
  # to return a good HTTP response (in case the Unicorn master nukes a
  # single worker for timing out).

  server unix:/webapps/hello_django/run/gunicorn.sock fail_timeout=0;
}

server {

    listen   80;
    server_name quickerhub.com;

    client_max_body_size 4G;

    access_log /webapps/hello_django/logs/nginx-access.log;
    error_log /webapps/hello_django/logs/nginx-error.log;

    location /static {
        root   /webapps/hello_django/interest/;
    }

    location /media {
        root   /webapps/hello_django/interest/;
    }

    location /static/admin {
        root /webapps/hello_django/lib/python2.7/site-packages/django/contrib/admin/;
    }

    location / {
        # an HTTP header important enough to have its own Wikipedia entry:
        #   http://en.wikipedia.org/wiki/X-Forwarded-For
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # enable this if and only if you use HTTPS, this helps Rack
        # set the proper protocol for doing redirects:
        # proxy_set_header X-Forwarded-Proto https;

        # pass the Host: header from the client right along so redirects
        # can be set properly within the Rack application
        proxy_set_header Host $http_host;

        # we don't want nginx trying to do something clever with
        # redirects, we set the Host: header above already.
        proxy_redirect off;

        # set "proxy_buffering off" *only* for Rainbows! when doing
        # Comet/long-poll stuff.  It's also safe to set if you're
        # using only serving fast clients with Unicorn + nginx.
        # Otherwise you _want_ nginx to buffer responses to slow
        # clients, really.
        # proxy_buffering off;

        # Try to serve static files from nginx, no point in making an
        # *application* server like Unicorn/Rainbows! serve static files.
        if (!-f $request_filename) {
            proxy_pass http://interest_app_server;
            break;
        }
    }

    # Error pages
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /webapps/hello_django/interest/templates/;
    }
}
ljrh
  • 439
  • 7
  • 20
  • 2
    Dude. See that part that says `Client secret`? that's supposed to be **secret** – Thomas Jul 08 '13 at 03:02
  • Also, post your nginx config for this vhost, silly. – Thomas Jul 08 '13 at 03:03
  • I appreciate the help but I deleted about 12 chars out of the secret, notice it's a little short (; config added! Thanks – ljrh Jul 08 '13 at 03:13
  • I notice the the secrets in the rest of your questions aren't as short. regardless, you've significantly reduced my search space. And why would you post ANY PART of the secret? – Thomas Jul 08 '13 at 03:16
  • this is not a production app..but I appreciate your concern, I am still learning – ljrh Jul 08 '13 at 03:18

1 Answers1

5

you have

server_name quickerhub.com;

the get request is coming back to

http://www.quickerhub.com/?code=4/bzqKIpj3UA3bBiyJfQzi3svzPBLZ.QoB_rXWZ6hUbmmS0T3UFEsPMOFF4fwI

quickerhub.com != www.quickerhub.com and so nginx is falling through to serving the default page (for when it can't find a vhost).

all you need to do is use

server_name www.quickerhub.com quickerhub.com;

or even better, add this to "canonicalise" all your urls to the version without www.

server {
    server_name www.quickerhub.com;

    expires epoch;
    add_header Cache-Control "no-cache, public, must-revalidate, proxy-revalidate";
    rewrite ^ http://quickerhub.com$request_uri permanent;
}
Thomas
  • 11,757
  • 4
  • 41
  • 57