Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm deploying my first django app. I'm familiar with nginx and fastcgi from deploying php-fpm. I can't get python to recognize the urls. I'm also at a loss on how to debug this further. I'd welcome solutions to this problem and tips on debugging fastcgi problems.

Currently I get a 404 page regardless of the url and for some reason a double slash For http://www.site.com/admin/

Page not found (404)
Request Method: GET
Request URL:    http://www.site.com/admin//

My urls.py from the debug output - which work in the dev server.

Using the URLconf defined in ahrlty.urls, Django tried these URL patterns, in this order:
^listings/
^admin/
^accounts/login/$
^accounts/logout/$

my nginx config

server {
       listen   80;
       server_name  beta.ahrlty.com;
       access_log  /home/ahrlty/ahrlty/logs/access.log;
       error_log  /home/ahrlty/ahrlty/logs/error.log;

       location /static/ {
               alias  /home/ahrlty/ahrlty/ahrlty/static/;
               break;
       }

       location /media/ {
               alias /usr/lib/python2.6/dist-packages/django/contrib/admin/media/;
               break;
       }

       location / {
               include /etc/nginx/fastcgi_params;
               fastcgi_pass 127.0.0.1:8001;
               break;
       }
}

and my fastcgi_params

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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

fastcgi_param  PATH_INFO          $fastcgi_script_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

And lastly I'm running fastcgi from the commandline with django's manage.py.

python manage.py runfcgi method=threaded host=127.0.0.1 port=8080 pidfile=mysite.pid minspare=4 maxspare=30 daemonize=false

I'm having a hard time debugging this one. Does anything jump out at anybody?

Notes

  • nginx version: nginx/0.7.62
  • Django svn trunk rev 13013
share|improve this question
    
Is there anything I can add to make this a better question? –  reconbot Apr 22 '10 at 19:02

3 Answers 3

up vote 3 down vote accepted

maybe have a look at the django documentation at http://code.djangoproject.com/wiki/BackwardsIncompatibleChanges#ChangedthewayURLpathsaredetermined. the solution for my smiliar problems (but with lighttpd) was putting

FORCE_SCRIPT_NAME=""

in my settings.py. also give

FORCE_SCRIPT_NAME="/"

a try!

share|improve this answer
    
You were both right, but you told me why. Thanks to both AgentK and lazerscience! –  reconbot Apr 25 '10 at 0:29

I know that leaving in SCRIPT_NAME gave me all sorts of problems.

My fastcgi_params in production and testing are:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  PATH_INFO          $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

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

Everything else is pretty much identical.

share|improve this answer

I just remove string

fastcgi_param  SCRIPT_NAME  $fastcgi_script_name;

from my nginx config file, and always start working.

(nginx 0.7.65, Django 1.4)

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.