2010-10-15 15 views
1

J'ai configuré nginx, fastcgi et django. Le lancer mon projet django par FastCGI en utilisant:Erreur de connexion Nginx, FastCGI et Django refusée

python26 manage.py runfcgi host=127.0.0.1 port=8080 --settings=settings 

Lorsque je visite http://127.0.0.1 je peux voir la django normale 404 depuis que j'ai pas tout d'installation sur mon projet django en dehors de l'administrateur. J'ai donc essayé de visualiser http://127.0.0.1/admin et il renvoie une erreur de passerelle 502 incorrecte. J'ai vérifié les journaux et voici ce que j'ai trouvé. Quelqu'un qui sait ce qui cause cette erreur?

2010/10/15 23:09:34 [error] 4796#0: *1 FastCGI sent in stderr: "" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /admin/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:8080", host: "localhost" 
2010/10/15 23:09:34 [error] 4796#0: *1 FastCGI sent in stderr: "Traceback (most recent call last): 
    File "/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py", line 574, in run 
    protocolStatus, appStatus = self.server.handler(self) 
    File "/usr/lib/python2.6/site-packages/flup/server/fcgi_base.py", line 1159, in handler 
    result = self.application(environ, start_response) 
    File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 245, in __call__ 
    response = middleware_method(request, response) 
    File "/usr/lib/python2.6/site-packages/django/contrib/sessions/middleware.py", line 36, in process_response 
    request.session.save() 
    File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/db.py", line 56, in save 
    session_key = self.session_key, 
    File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py", line 152, in _get_session_key 
    self._session_key = self._get_new_session_key() 
    File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/base.py", line 144, in _get_new_session_key 
    if not self.exists(session_key): 
    File "/usr/lib/python2.6/site-packages/django/contrib/sessions/backends/db.py", line 29, in exists 
    Session.objects.get(session_key=session_key) 
    File "/usr/lib/python2.6/site-packages/django/db/models/manager.py", line 132, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 336, in get 
    num = len(clone) 
    File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 81, in __len__ 
    self._result_cache = list(self.iterator()) 
    File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 269, in iterator 
    for row in compiler.results_iter(): 
    File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 672, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 726, in execute_sql 
    cursor = 

BTW J'utilise nginx07 et django1.2.

MISE À JOUR:

Voici mon nginx configs:

user apache apache; 

worker_processes 4; 

error_log /var/log/nginx/error_log info; 

events { 
    worker_connections 1024; 
    use epoll; 
} 

http { 
    include   /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main 
     '$remote_addr - $remote_user [$time_local] ' 
      '"$request" $status $bytes_sent ' 
     '"$http_referer" "$http_user_agent" ' 
     '"$gzip_ratio"'; 

    client_header_timeout 10m; 
    client_body_timeout  10m; 
    send_timeout   10m; 

    connection_pool_size  256; 
    client_header_buffer_size 1k; 
    large_client_header_buffers 4 2k; 
    request_pool_size   4k; 

    gzip on; 
    gzip_min_length 1100; 
    gzip_buffers 4 8k; 
    gzip_types  text/plain; 

    output_buffers 1 32k; 
    postpone_output 1460; 

    sendfile on; 
    tcp_nopush on; 
    tcp_nodelay on; 

    keepalive_timeout 75 20; 

    ignore_invalid_headers on; 
    index index.html; 

    server { 
     listen 80; 
     server_name localhost; 
     location /site_media { 
      root /media/; # Notice this is the /media folder that we create above 
     } 
     location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov) { 
      access_log off; 
      expires  30d; 
     } 
     location/{ 
      # host and port to fastcgi server 
      fastcgi_pass 127.0.0.1:8080; 
      fastcgi_param CONTENT_LENGTH $content_length; 
      fastcgi_param CONTENT_TYPE  $content_type; 
      fastcgi_param PATH_INFO  $fastcgi_script_name; 
      fastcgi_param QUERY_STRING  $query_string; 
      fastcgi_param REQUEST_METHOD $request_method; 
      fastcgi_param SERVER_NAME  $server_name; 
      fastcgi_param SERVER_PORT  $server_port; 
      fastcgi_param SERVER_PROTOCOL $server_protocol; 

      fastcgi_pass_header Authorization; 
      fastcgi_intercept_errors off; 
     } 
     access_log /var/log/nginx/localhost.access_log main; 
     error_log /var/log/nginx/localhost.error_log; 
    } 
} 
+0

Afficher les journaux de l'application au lieu des journaux nginx. Collez-vous les configs nginx. – iddqd

+0

Que voulez-vous dire par les journaux d'applications? Désolé, je suis encore nouveau dans ce domaine. J'ai mis à jour mon message pour inclure mes configs nginx. – Marconi

Répondre

0

Je peux voir de vos journaux que même les connexions pour «/» est refusée, cela n'a donc rien à voir avec l'administrateur. Essayez d'utiliser telnet pour vous connecter à localhost sur le port approprié et voir si vous pouvez ouvrir une connexion. Je suppose que le démon ne fonctionne pas.

Vous avez également supprimé la traceback de python, ce qui serait très utile pour déterminer pourquoi le processus a peut-être planté.

+0

Salut, j'ai ajouté tout le retraçage. Vous avez raison, quand je fais telnet, la connexion a été refusée. Mais je ne sais pas pourquoi. Y at-il un problème avec mes config nginx? – Marconi

+0

Non, si vous ne pouvez pas vous connecter en utilisant telnet, il n'y a rien acceptant les connexions. Vérifiez que votre application fonctionne réellement et qu'elle écoute sur ce port. En outre, si l'application écoute sur 127.0.0.1, elle n'acceptera que les connexions de localhost, et non d'un hôte externe. – knutin

+1

J'ai jeté un autre regard sur la traceback et il semble qu'il se bloque quand il essaie d'enregistrer une session dans la base de données. Utilisez-vous sqlite? L'utilisateur qui exécute le processus a-t-il l'autorisation de lire et d'écrire le fichier sqlite, ainsi que de lire et d'exécuter le répertoire parent? – knutin