在同一服务器中的Rails应用程序的子目录中的Wordpress的nginx配置

时间:2017-06-01 08:38:10

标签: php nginx

我一直在找"文件未找到"我尝试访问example.com/blog时出错,并在/var/log/nginx/error.log

FastCGI sent in stderr: "Primary script unknown" while reading 
response header from upstream

这是我的nginx配置:

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;
  }
}

PHP-FPM和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

wordpress目录的权限:

drwxrwsr-x  5 www-data www-data  4096 Jun  1 00:13 example_blog/

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

/etc/php/7.0/fpm/pool.d/www.conf

user = www-data
group = www-data

listen.owner = nginx
listen.group = nginx
;listen.mode = 0660

一直在谷歌搜索并尝试各种方式,但仍然无法通过此错误。

1 个答案:

答案 0 :(得分:3)

问题在于location /blog { root /var/www/example_blog; ...将文件放在/var/www/example_blog/blog/

中 仅当通过将root与URI连接来构造文件路径时,

$document_root才适用。否则,您需要重写URI或使用alias指令。有关详细信息,请参阅this document

alias指令可以像这样实现:

location = /blog { rewrite ^ /blog/ last; }

location ^~ /blog/ {
    alias /var/www/example_blog/;
    index index.php;

    if (!-e $request_filename) {
        rewrite  ^(.*)$  /blog/index.php?q=$1  last;
    }

    location ~ \.php$ {
        if (!-f $request_filename) { return 404; }

        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }
}

使用^~修饰符可以避免与同一级别的其他正则表达式位置块存在任何歧义。有关详细信息,请参阅this document

为避免/blogx等URI问题,请在/location上使用尾随alias。并添加完全匹配location来处理/blog