场景是我想使用Wordpress作为我们的Ember.js前端应用程序的后端API提供程序。
需要从根提供Ember.js前端,理想情况下,可以通过转到子目录来访问Wordpress实例。例如,在localhost上,它将是http://localhost
和http://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工作正常。)
答案 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。