如何为Ember.js + Wordpress配置Nginx?

时间:2016-05-01 16:12:05

标签: php wordpress nginx ember.js

场景是我想使用Wordpress作为我们的Ember.js前端应用程序的后端API提供程序。

需要从根提供Ember.js前端,理想情况下,可以通过转到子目录来访问Wordpress实例。例如,在localhost上,它将是http://localhosthttp://localhost/wordpress

在磁盘上,这两个分别部署在/srv/http/ember/srv/http/wordpress中。

我试图通过Nginx网站上的示例组装配置: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/

配置:

http {

    upstream php {
      server   unix:/run/php-fpm/php-fpm.sock;
    }

    server {
        listen 80;
        server_name localhost;
        root /srv/http/ember;
        index index.html;
        try_files $uri $uri/ /index.html?/$request_uri;

        location /wordpress {
            root /srv/http/wordpress;
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
            include fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass php;
            fastcgi_split_path_info ^(/wordpress)(/.*)$;
        }

    }

}

然而,这显然不是正确的解决方案。 在尝试访问地址http://localhost/wordpress/index.php时,我在日志中获得以下内容:

2016/05/01 17:50:14 [error] 4332#4332: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /wordpress/index.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "localhost"

关于将root指令放在wordpress位置的位置,配方并不清楚。我也尝试添加index index.php,但这也无济于事。

(服务Ember app工作正常。)

1 个答案:

答案 0 :(得分:0)

从您的问题来看,单独使用WordPress location ~ \.php$块。但是,它需要/srv/http的根才能在本地路径/wordpress下找到以/srv/http/wordpress开头的URI的脚本文件。

由于有两个位置都使用相同的WordPress根,因此使/srv/http成为默认值(即从server块继承)并移动root /srv/http/ember;可能更为清晰进入一个单独的location /区块。

server {
    listen 80;
    server_name localhost;
    root /srv/http;

    location / {
        root /srv/http/ember;
        index index.html;
        try_files $uri $uri/ /index.html?/$request_uri;
    }

    location /wordpress {
        index index.php;
        try_files $uri $uri/ /wordpress/index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_intercept_errors on;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php;
    }
}

请注意,location /wordpress中的默认URI为/wordpress/index.php,而不是您原来的/index.php

我已明确设置SCRIPT_FILENAME因为它可能会或可能不会显示在您的fastcgi.conf文件中。

fastcgi_split_path_info已被删除,因为在您的具体情况下它是不必要的,我认为它实际上会以您拥有它的方式打破WordPress。