Я запустил сайт по настройке puma / rails под nginx. Теперь нам нужно настроить wordpress по пути / блогу, т.е.
www.mysite.com
это приложение для рельсов, и www.mysite.com/blog
это блог на wordpress.
настройка местоположения для блога Wordpress выглядит следующим образом
upstream app {
# Path to Puma SOCK file, as defined previously
server unix:///var/run/website/website.sock fail_timeout=0;
}
server {
listen 80;
server_name www.bhokaal.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
#server_name www.bhokaal.com;
access_log /home/bhokaal/bhokaal.com/logs/access.log;
error_log /home/bhokaal/bhokaal.com/logs/error.log;
ssl_certificate /etc/ssl/www.bhokaal.com_cert_chain.crt;
ssl_certificate_key /etc/ssl/www.bhokaal.com.key;
root /home/bhokaal/bhokaal-website/public/;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
}
location ^~ /assets/ {
gzip_static on;
# Per RFC2616 - 1 year maximum expiry
expires 1y;
add_header Cache-Control public;
}
location /blog {
root /home/bhokaal/bhokaal-blog/;
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 500m;
keepalive_timeout 15;
}
Я предполагаю, что / blog обрабатывается PHP, а остальное идет на вышестоящий сервер puma.
Мы получаем довольно загадочную ошибку при доступе www.bhokaal.com/blog
2017/12/08 12:10:02 [error] 19193#19193: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 49.207.56.120, server: , request: "GET /blog/ HTTP/2.0", upstream: "fastcgi://unix:/run/php/php7.1-fpm.sock:", host: "www.bhokaal.com"
Nginx, PHP-FPM и Puma работают под одним и тем же пользователем, поэтому я не думаю, что это проблема с разрешениями пользователей, как указано в большинстве блогов, на которые я ссылался по этой проблеме.
Вам нужно использовать alias
для сопоставления URI, которые начинаются с /blog
в корень, который заканчивается чем-то другим. Видеть этот документ для большего.
Самое чистое решение - использовать вложенный location
блок. В ^~
модификатор на внешнем блоке позволяет избежать побочных эффектов. Видеть этот документ для большего.
location ^~ /blog {
alias /home/bhokaal/bhokaal-blog;
index index.php;
if (!-e $request_filename) { rewrite ^ /blog/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
}
Избегайте try_files
с участием alias
из-за Эта проблема, и обратите внимание это предупреждение по использованию if
.
это то, что сработало для меня,
установка WordPress под /home/bhokaal/bhokaal-website/public/blog
то есть общая папка rails
добавление блоков location и PHP как обычно
location /blog {
index index.html index.htm index.php;
try_files $uri $uri/ /blog/index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}