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?

4
  • Did you try the suggestions in this question? serverfault.com/questions/517190/… Commented May 22, 2016 at 6:08
  • Yes, it was the first one I came across and I systematically tried every suggestion in that thread. Commented May 22, 2016 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. Commented May 22, 2016 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. Commented May 22, 2016 at 10:46

1 Answer 1

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.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.