Home > Tech.Notes > django REMOTE_ADDR on nginx

django REMOTE_ADDR on nginx

1   现象

  1. Django 取得客户端IP,在本地测试良好,但是放到服务器上报错, 报错信息:

    Request Method:     POST
    Request URL:        http://www.b0rder.com/blog/8/comment/
    Exception Type:     KeyError
    Exception Value:    'REMOTE_ADDR'

错误代码:

remoteIP = request.META['REMOTE_ADDR']
  1. 服务器采用 nginx fastcgi 方式.

1.1   分析原因

  1. 报错信息KeyError,说明服务器中没有 ‘REMOTE_ADDR’, 但是我在服务器中通过 Django 自带的服务器运行正常显示:

    python manage.py runserver 7000
  2. 原因可能是 nginx 配置的问题。Google了一圈发现没有把fastcgi转换过来:

    fastcgi_param REMOTE_ADDR $remote_addr;
    fastcgi_param SERVER_PROTOCOL $server_protocol;
    fastcgi_param SERVER_PORT $server_port;
    fastcgi_param SERVER_NAME $server_name;

1.2   解决

  1. 可以通过 nginx 的 include 简单处理:

    include /etc/nginx/fcgi.conf

1.3   我的nginx配置文件

server {
    listen 80;
    server_name www.b0rder.com b0rder.com;
    location ^~ /static  {
        alias /home/border/project/blog-app/media/;
        }
    location ^~ /media  {
        alias /home/border/lib/django/django/contrib/admin/media/;
        }
    location ^~ /books  {
        alias /home/border/books/;
        autoindex on;
        }
    location / {
        fastcgi_pass 127.0.0.1:9999;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_pass_header Authorization;
        fastcgi_param REMOTE_ADDR $remote_addr;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;
        fastcgi_intercept_errors off;
        }
    access_log  /home/border/log/access.b0rder.log;
    error_log  /home/border/log/error.b0rder.log;
    }

1.4   感谢

  1. 感谢 Vingel (http://www.vingel.com/) 的友情支持。

–EOF–

Categories: Tech.Notes Tags: ,
  1. No comments yet.
  1. No trackbacks yet.

Additional comments powered by BackType