Сценарий заключается в том, что я хотел бы использовать WordPress в качестве поставщика API бэкэнда для нашего веб-приложения Ember.js.
Интерфейс 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 работает отлично.)
Из вашего вопроса кажется, что location ~ \.php$
Блок используется только WordPress. Однако для этого нужен корень /srv/http
чтобы найти файлы сценариев для URI, начинающихся с /wordpress
под местным путем /srv/http/wordpress
,
Поскольку в двух местах используется один и тот же корень 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;
}
}
Обратите внимание, что URI по умолчанию в location /wordpress
является /wordpress/index.php
и не /index.php
как вы изначально имели.
Я явно поставил SCRIPT_FILENAME
как это может или не может появиться в вашем fastcgi.conf
файл.
fastcgi_split_path_info
был удален, так как он не нужен в вашем конкретном случае, и я думаю, что это на самом деле сломает WordPress так, как вы это сделали.
Других решений пока нет …