沃梦达 / 编程技术 / CMS教程 / 正文

php – 在同一服务器上的Rails应用程序子目录中的WordPress的nginx配置

当我尝试访问example.com/blog和/var/log/nginx/error.log时,我一直收到“找不到文件”错误:FastCGI sent in stderr: Primary script unknown while reading response header from upstream这是我的nginx配置:u...

当我尝试访问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

一直在谷歌搜索和尝试各种方式,但仍然无法让它通过这个错误.

解决方法:

问题是位置/博客{root / var / www / example_blog; …将文件放在/ var / www / example_blog / blog /中.

只有在通过将$document_root与URI连接起来构造文件路径时,root才适用.否则,您需要重写URI或使用别名指令.有关详情,请参见this document.

别名指令可以像这样实现:

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问题,请在位置和别名上使用尾随/.并添加一个完全匹配的位置来处理/博客.

本文标题为:php – 在同一服务器上的Rails应用程序子目录中的WordPress的nginx配置

基础教程推荐