django REMOTE_ADDR on nginx
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.1 分析原因
-
报错信息KeyError,说明服务器中没有 ‘REMOTE_ADDR’, 但是我在服务器中通过 Django 自带的服务器运行正常显示:
python manage.py runserver 7000
-
原因可能是 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 解决
-
可以通过 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;
}
Recent Comments