Я установил экземпляр Wordpress Multisite (он же WPMU) на AWS для обслуживания четырех моих блогов, которые в настоящее время устанавливаются на одном сайте. Три блога работают в корневом домене, но один должен обслуживаться из / blog /, поскольку у меня есть собственный письменный веб-сайт в корне. Я не могу заставить WPMU обслуживать блог из подкаталога из-за ограничений программного обеспечения, хотя Wordpress на одном сайте может это сделать, поэтому я хотел бы посмотреть, смогу ли я сделать это с помощью Nginx.
Мой запасной вариант - это установка Wordpress на одном сайте, которой я бы предпочел избегать, поскольку она увеличивает накладные расходы на обслуживание и резервное копирование. Еще один выход - разместить блог на субдомене, что не так хорошо для SEO, поэтому я бы тоже предпочел избежать этого.
Я очень открыт для альтернативных решений, которые помещают блог в подкаталог с запущенным WPMU
Это должно выглядеть так для зрителя
example.com <- Viewer sees custom PHP application
example.com/blog/ <- Viewer sees WPMU blog
blog.example.com <- hidden from viewers
Вот как, я думаю, это можно было бы настроить
example.com <- Runs custom PHP written application
blog.example.com <- WPMU runs on a subdomain, mapped to a subfolder of the main domain by Nginx
Я думаю, что можно будет переписать что-то для работы с Wordpress Multisite с использованием Nginx, но я не могу с этим справиться. proxy_pass отлично работал для статического сайта (не могу опубликовать конфигурацию, моя репутация недостаточна для публикации такого количества ссылок), но я столкнулся с ошибкой
"proxy_pass" не может иметь часть URI в местоположении, заданном регулярным выражением "(и т. д.)
Я видел, как люди делали хитрые вещи с перезаписью в nginx, что убедило его в работе, но я не могу понять это правильно. Кто-нибудь может с этим помочь?
Я разместил несколько соответствующих блоков местоположения ниже, которые работают в моей текущей конфигурации ниже - конечно, все статические ресурсы js / css / jpeg / etc должны быть перенаправлены, поскольку WPMU все равно будет генерировать html, который ссылается на поддомен
# We want all resources in the wp-content/uploads/20x and uploads/galleries
# folders to redirect to wp-content/uploads/sites/$blogid/whatever
location ~* "wp-content\/uploads\/((\d{4,}\/\d{2,}|galleries).*)" {
alias /var/www/wordpress/wp-content/uploads/sites/$blogid/$1;
return 301 $scheme://$host/wp-content/uploads/sites/$blogid/$1;
}
# Set caching headers for images
location ~* \.(jpg|jpeg|png|gif|css|js)$ {
log_not_found off; access_log off;
add_header Cache-Control "public";
expires 4h;
}
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Если бы это был простой блок без регулярного выражения, как в моем статическом тесте, что-то вроде этого, вероятно, сработало бы.
# Send HipHop and PHP requests to HHVM
location ~ \.(hh|php)$ {
proxy_pass http://example.com
fastcgi_keep_conn on;
fastcgi_intercept_errors on;
fastcgi_pass php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Вот пошаговое руководство, как это сделать:
https://yuji.wordpress.com/2010/03/08/nginx-wordpress-proxy-subdirectory-to-wordpress-subdomain/
В конце концов, автор этого не советует. Куда я бы пошел иначе, чтобы, возможно, избежать некоторых из его неприятных событий, так это переписывание URL. Это можно сделать с помощью субмодуля nginx string вместо Wordpress:
http://nginx.org/en/docs/http/ngx_http_sub_module.html
В этих ссылках есть дополнительные объяснения по проксированию и перезаписи:
https://stackoverflow.com/questions/9233368/nginx-server-configuration-subdomain-to-folder
И не забудьте косую черту в конце: