2

Using the latest version of nginx (1.10.0) and php-fpm (PHP 7.0.6) on 64-bit arch linux.

When attempting to request index.php for a DokuWiki installation, I get the following error:

2016/05/21 22:09:50 [error] 11099#11099: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.70.3, server: doku.test.com, request: "GET /install.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "doku.test.com"

Here is the relevant server config:

server {
  listen 80;
  server_name doku.test.com;
  root /var/www/doku/public_html/;
  access_log /var/log/nginx/scripts.log scripts;

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass  unix:/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

}

Here is fastcgi_params:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

As can be seen in my server config, I am attempting to log the output of the SCRIPT_FILENAME parameter as all of my researching seems to be pointing to that as the culrpit. Here is the relevant part of nginx.conf:

log_format scripts '$document_root$fastcgi_script_name > $request';

When requesting the index.php page, the below is generated in scripts.log:

/var/www/doku/public_html/index.php > GET /index.php HTTP/1.1

Doing an ls on that file:

-rwxr-xr-x 1 nginx nginx 182 May 21 06:45 /var/www/doku/public_html/index.php

It's worth noting that both the nginx daemon and the php-fpm daemon are configured to run as the nginx user using the nginx group. I'm at a loss as to why I am getting the initial error as the logging as effectively proven that SCRIPT_FILENAME is indeed pointing to the correct path.

Out of all the ServerFault answers I reviewed, adding that param to the server config seemed to be the #1 solution to my error, but it does not seem to fix it in my case.

Any suggestions?

Joshua Gilman
  • 142
  • 1
  • 1
  • 5
  • Did you try the suggestions in this question? http://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown – Tim May 22 '16 at 06:08
  • Yes, it was the first one I came across and I systematically tried every suggestion in that thread. – Joshua Gilman May 22 '16 at 06:21
  • Also, for what it's worth, I've completely scrapped the container and started from a fresh install, reconfigured up to the point in my OP, and I'm still running into the issue. – Joshua Gilman May 22 '16 at 07:31
  • Do you have any other server blocks? You shouldn't have `x` permission bit set with these scripts, it is needed for software executed from shell. – Tero Kilkanen May 22 '16 at 10:46

1 Answers1

0

First in check if you have set the correct listen address in your www.conf file for PHP-FPM (FastCGI Process Manager). So open www.conf file (location: /etc/php5/fpm/pool.d/www.conf) and it should see somthing like this:

Start a new pool named 'www'.
[www]

;prefix = /path/to/pools/$pool

user = www-data
group = www-data

listen = 127.0.0.1:8080

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. 
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Under the listen address, check if you have set the loopback address (it identifies your server) and the port number. Then in your nginx.conf file change fastcgi_pass to 127.0.0.1:8080, so in the end it should look like:

server {
  listen 80;
  server_name doku.test.com;
  root /var/www/doku/public_html/;
  access_log /var/log/nginx/scripts.log scripts;

  location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass  127.0.0.1:8080;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

}

Notice I have used port 8080 in the example, you may need to chnage it.

netman
  • 23
  • 3