1

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?

  • Did you try the suggestions in this question? serverfault.com/questions/517190/… – Tim May 22 '16 at 6: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 6: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 7: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
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.