nginx配置文件fastcgi_params中缺少以下部分,会造成访问php文件时报Primary script unknown错误。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
可以用命令看fastcgi_params和fastcgi.conf这2个文件的区别,注意:$document_root和$fastcgi_script_name之间没有/。
$ diff fastcgi.conf fastcgi_params2d1< fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; |
原本nginx只有fastcgi_params,后来发现很多人在定义SCRIPT_FILENAME时使用了硬编码的方式,于是为了规范用法便引入了fastcgi.conf。
不过这样的话就产生一个疑问:为什么一定要引入一个新的配置文件,而不是修改旧的配置文件?
这是因为fastcgi_param指令是数组型的,和普通指令相同的是:内层替换外层;和普通指令不同的是:当在同级多次使用的时候,是新增而不是替换。换句话说,如果在同级定义两次SCRIPT_FILENAME,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。