I keep getting the "File not found" error when I try to access example.com/blog, and in /var/log/nginx/error.log
:
FastCGI sent in stderr: "Primary script unknown" while reading
response header from upstream
Here is my nginx configuration:
upstream example {
server unix:/home/deployer/example/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name example.com;
client_max_body_size 4G;
keepalive_timeout 10;
error_page 500 502 503 504 /500;
root /home/deployer/example/current/public;
try_files $uri/index.html $uri.html $uri @example;
location @example {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://example;
}
location /blog {
root /var/www/example_blog;
index index.php;
if (!-e $request_filename) {
rewrite ^(.*)$ /blog/index.php?q=$1 last;
}
location ~ .php(?|$) {
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}
}
location = /50x.html {
root html;
}
location = /404.html {
root html;
}
location @503 {
error_page 405 = /system/maintenance.html;
if (-f $document_root/system/maintenance.html) {
rewrite ^(.*)$ /system/maintenance.html break;
}
rewrite ^(.*)$ /503.html break;
}
if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
return 405;
}
if (-f $document_root/system/maintenance.html) {
return 503;
}
}
server {
server_name www.example.com;
return 301 $scheme://example.com$request_uri;
}
server {
listen 80;
server_name assets.example.com;
client_max_body_size 4G;
keepalive_timeout 10;
root /home/deployer/example/current/public;
location = /404.html {
root html;
}
if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
return 405;
}
if (-f $document_root/system/maintenance.html) {
return 503;
}
}
Processes of PHP-FPM and nginx:
$ ps aux | grep nginx
root 31590 0.0 0.0 32420 948 ? Ss 16:27 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 31593 0.0 0.1 32868 3596 ? S 16:27 0:00 nginx: worker process
deployer 32052 0.0 0.0 14224 936 pts/0 S+ 16:33 0:00 grep --color=auto nginx
$ ps aux | grep php
root 31656 0.0 1.4 356016 29892 ? Ss 16:27 0:00 php-fpm: master process (/etc/php/7.0/fpm/php-fpm.conf)
www-data 31659 0.0 0.2 356016 5880 ? S 16:27 0:00 php-fpm: pool www
www-data 31660 0.0 0.4 356344 8424 ? S 16:27 0:00 php-fpm: pool www
deployer 32059 0.0 0.0 14224 956 pts/0 S+ 16:33 0:00 grep --color=auto php
Permissions on the wordpress directory:
drwxrwsr-x 5 www-data www-data 4096 Jun 1 00:13 example_blog/
Permissions on the files in Wordpress:
drwxrwsr-x 5 www-data www-data 4096 Jun 1 00:13 ./
drwxr-xr-x 10 deployer deployer 4096 Jun 1 16:32 ../
-rw-r--r-- 1 www-data www-data 418 Sep 25 2013 index.php
-rw-r--r-- 1 www-data www-data 19935 Jan 3 02:51 license.txt
-rw-r--r-- 1 www-data www-data 7433 Jan 12 01:46 readme.html
-rw-r--r-- 1 www-data www-data 5447 Sep 28 2016 wp-activate.php
drwxr-sr-x 9 www-data www-data 4096 May 17 05:50 wp-admin/
-rw-r--r-- 1 www-data www-data 364 Dec 19 2015 wp-blog-header.php
-rw-r--r-- 1 www-data www-data 1627 Aug 29 2016 wp-comments-post.php
-rw-r--r-- 1 www-data www-data 3136 Jun 1 00:13 wp-config.php
-rw-r--r-- 1 www-data www-data 2853 Dec 16 2015 wp-config-sample.php
drwxrwsr-x 5 www-data www-data 4096 Jun 1 00:05 wp-content/
-rw-r--r-- 1 www-data www-data 3286 May 25 2015 wp-cron.php
drwxr-sr-x 18 www-data www-data 12288 May 17 05:50 wp-includes/
-rw-r--r-- 1 www-data www-data 2422 Nov 21 2016 wp-links-opml.php
-rw-r--r-- 1 www-data www-data 3301 Oct 25 2016 wp-load.php
-rw-r--r-- 1 www-data www-data 33939 Nov 21 2016 wp-login.php
-rw-r--r-- 1 www-data www-data 8048 Jan 11 13:15 wp-mail.php
-rw-r--r-- 1 www-data www-data 16255 Apr 7 02:23 wp-settings.php
-rw-r--r-- 1 www-data www-data 29896 Oct 19 2016 wp-signup.php
-rw-r--r-- 1 www-data www-data 4513 Oct 15 2016 wp-trackback.php
-rw-r--r-- 1 www-data www-data 3065 Sep 1 2016 xmlrpc.php
In /etc/php/7.0/fpm/pool.d/www.conf
:
user = www-data
group = www-data
listen.owner = nginx
listen.group = nginx
;listen.mode = 0660
Have been googling and tried various ways, but still couldn't get it passed this error.
The problem is that
location /blog { root /var/www/example_blog; ...
places the files in/var/www/example_blog/blog/
.root
is applicable only when the file path is constructed by concatenating the$document_root
with the URI. Otherwise you need to rewrite the URI or use analias
directive. See this document for details.The
alias
directive can be implemented like this:Use the
^~
modifier to avoid any ambiguity with other regular expression location blocks at the same level. See this document for details.To avoid problems with URIs such as
/blogx
, use a trailing/
on both thelocation
and thealias
. And add an exact matchlocation
to handle/blog
.