The error message “primary script unknown” is almost always related to a wrongly set SCRIPT_FILENAME
in the nginx fastcgi_param
directive (or incorrect permissions, see other answers).
You’re using an if
in the configuration you posted first. Well it should be well known by now that if is evil and often produces problems.
Setting the root
directive within a location block is bad practice, of course it works.
You could try something like the following:
server {
location / {
location ~* \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
try_files $uri @yii =404;
}
}
location @yii {
fastcgi_param SCRIPT_FILENAME $document_root$yii_bootstrap;
}
}
Please note that the above configuration is untested. You should execute nginx -t
before applying it to check for problems that nginx can detect right away.