nginx and php-fpm "Primary script unknown"
Smells like a duplicate, I know, but I have now tried this Setup 5 Times over, and still I can't get this to work. Most of the configs are complicated with chroot and multi servers etc., but I have reduced this now to the simplest config possible. I want to understand how the fpm is setup with nginx in it's simplest form...Please bear with me.
Current Setup:
- CentOS 7 64 bit
- nginx 1.8.0 from Nginx repo
- php 5.6 from Remi php56
Addition to /etc/nginx/conf.d/default.conf
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Addition and changes to /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
Added the file /usr/share/nginx/html/info.php
<?php phpinfo();?>
Started both services
systemctl start nginx.service
systemctl start php-fpm.service
and Finally tail -f /var/log/nginx/error.log
2015/11/09 12:18:01 [error] 28638#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: xx.xxx.xxx.xxx, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "xxx.xx.xxx.xx"
So it seems that the FPM can't find the script, this much I have managed to understand, but according to the config, the Script file name is the document root and the script name. Script name is info.php, and according to the default config the root path is :
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
Thus, if I concatenate this manually, I get
/usr/share/nginx/html/info.php
and this file exist
#ls -lah /usr/share/nginx/html/
total 20K
drwxr-xr-x 2 root root 4.0K Nov 9 12:35 .
drwxr-xr-x 3 root root 4.0K Apr 21 2015 ..
-rw-r--r-- 1 root root 537 Apr 21 2015 50x.html
-rw-r--r-- 1 root root 612 Apr 21 2015 index.html
-rw-r--r-- 1 root nginx 20 Nov 9 10:45 info.php
Can anybody give me an explanation why this is not working ?
$document_root
needs to pick up its value from a root
directive at the same location or in a parent container. You seem to have root
defined in a sibling container. Move root
to the server
container.