nginx中php的文件无法访问问题

nginx配置文件fastcgi_params中缺少以下部分,会造成访问php文件时报Primary script unknown错误。

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

可以用命令看fastcgi_paramsfastcgi.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,那么它们都会被发送到后端,这可能会导致一些潜在的问题,为了避免此类情况,便引入了一个新的配置文件。

References

  1. http://www.tupan.net/changjiandenginxpeizhiwuqu/
  2. FASTCGI_PARAMS VERSUS FASTCGI.CONF – NGINX CONFIG HISTORY