Django和Nginx的接合问题

转载自:http://j-lite.net/blog/2009/11/24/django-and-nginx

昨日在单位却碰到了问题——URL总是出问题……具体的情况是无论输入什么URL,Django都会报404。可是事实上使用Django自带的runserver和werkzeug都是没有问题的,直接跑shell下resolve也是解析得欢得很,问题很诡异。

苦苦纠结良久未果,只好向同事请教。还是同事有经验,很快就指出了问题所在。原来是项目的设置出了问题,settings.py里有一个FORCE_SCRIPT_NAME的字段需要设置为空字符,以此来覆盖掉nginx传递请求给django时传过来的脚本名称。试了一下,果然OK了。

问题是解决了,可是总觉得有点奇怪,因为我记得很清楚,J-Lite并没有复写这个参数,怎么就碰不到这个问题呢?重新翻开vps上的nginx.conf才发现,原来自己上次配置是fasgcgi的参数并不是用include fastcgi_params这样的方式引用缺省参数表,而是在server段直接定义的。再继续挖掘,在fastcgi_params中找到了这么一条代码:

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;

这应该就是Nginx传递脚本名称的设置了。果然,在删掉这段之后,即便不定义FORCE_SCRIPT_NAME,之前的问题也不会出现了。

由于问题比较诡异,所以立马写下来做个笔记,免得又给忘了这事。

备注:

django 的setting 在用 fsgi 并连 nginx时比较麻烦,用os.path做绝对路径比较靠谱

你可能感兴趣的:(nginx,django,脚本,OS,J#)