用nginx部署django站点时的错误
站点用flup做代理,nginx配置部分如下:
location / {
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
include fastcgi_params;
fastcgi_read_timeout 60;
fastcgi_pass 127.0.0.1:6000;
fastcgi_param PATH_INFO $fastcgi_script_name;
}
对于django来说,必须用到PATH_INFO,所以加了fastcgi_param PATH_INFO $fastcgi_script_name;
。然后问题也来了,所有url都无法找到。通过django的日志发现,所有url都重复了,比如/api变成了/api/api/。
##原来问题在于 fastcgi_params的内容
nginx的/etc/nginx/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 HTTPS $https if_not_empty;
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;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;`
其中,fastcgi_param SCRIPT_NAME $fastcgi_script_name;
和fastcgi_param PATH_INFO $fastcgi_script_name;
的作用相当于request.path = SCRIPT_NAME/PATH_INFO/
,导致了url重复的现象。