We are happy to announce that Vesta is back under active development as of 25 February 2024. We are working on v1 candidate and expect to engage more with the community over the coming months. We are committed to open source, and we encourage contributors to help us build the future of Vesta.
Nginx+PHP-fpm+wordpress multisite
Nginx+PHP-fpm+wordpress multisite
Помогите пожалуйста настроить Nginx на работу с wordpress в режиме multisite.
Ununtu 14.04 Nginx+PHP-fpm
Действую по инструкцииhttp://oddstyle.ru/wordpress-2/stati-wo ... nginx.html
При создании файла etc/nginx/conf.d/wordpress-mu.conf со следующим содержимым:
Команда nginx -t сообщает об ошибке
nginx: [emerg] "location" directive is not allowed here in /etc/nginx/conf.d/wordpress-mu.conf:6
nginx: configuration file /etc/nginx/nginx.conf test failed
Как я понимаю, ругается на это:
Содержимое etc/nginx/nginx.conf
Содержимое home/site_name/conf/web/nginx.conf
Три вопроса:
1. Что означает эта ошибка? Почему она возникает? В официальном руководстве wordpress конфиг такого же содержимого.
2. Если сервер используетя для множества сайтов на разных CMS правильно ли настройки для мультисайтинга wordpress описывать глобально? Может это делать в пользовательской директории?
3. Как правильно организовать wordpress-multisite в VESTA?
Ununtu 14.04 Nginx+PHP-fpm
Действую по инструкцииhttp://oddstyle.ru/wordpress-2/stati-wo ... nginx.html
При создании файла etc/nginx/conf.d/wordpress-mu.conf со следующим содержимым:
Code: Select all
# WordPress multisite subdirectory rules.
# Designed to be included in any server {} block.
# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
try_files $uri $uri/ /index.php?$args;
}
# Directives to send expires headers and turn off 404 error logging.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
location ~ ^/[_0-9a-zA-Z-]+/files/(.*)$ {
try_files /wp-content/blogs.dir/$blogid/files/$2 /wp-includes/ms-files.php?file=$2 ;
access_log off; log_not_found off; expires max;
}
#avoid php readfile()
location ^~ /blogs.dir {
internal;
alias /var/www/example.com/htdocs/wp-content/blogs.dir ;
access_log off; log_not_found off; expires max;
}
# Uncomment one of the lines below for the appropriate caching plugin (if used).
nclude global/wordpress-ms-subdir-wp-super-cache.conf;
#include global/wordpress-ms-subdir-w3-total-cache.conf;
# Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
# Zero-day exploit defense.
# http://forum.nginx.org/read.php?2,88845,page=3
# Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
# Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine. And then cross your fingers that you won't get hacked.
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_intercept_errors on;
fastcgi_pass php;
}
nginx: [emerg] "location" directive is not allowed here in /etc/nginx/conf.d/wordpress-mu.conf:6
nginx: configuration file /etc/nginx/nginx.conf test failed
Как я понимаю, ругается на это:
Code: Select all
location / {
try_files $uri $uri/ /index.php?$args;
}
Code: Select all
# Server globals
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
# Worker config
events {
worker_connections 2048;
use epoll;
multi_accept on;
}
http {
# Main settings
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_timeout 1m;
client_body_timeout 1m;
client_header_buffer_size 2k;
client_body_buffer_size 256k;
client_max_body_size 256m;
large_client_header_buffers 4 8k;
send_timeout 30;
keepalive_timeout 60 60;
reset_timedout_connection on;
server_tokens off;
server_name_in_redirect off;
server_names_hash_max_size 512;
server_names_hash_bucket_size 512;
types_hash_max_size 2048;
# Включаем кеширование информации об открытых файлах.
open_file_cache max=5000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# Log format
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format bytes '$body_bytes_sent';
#access_log /var/log/nginx/access.log main;
access_log off;
# Mime settings
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Compression
gzip on;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 512;
gzip_buffers 8 64k;
gzip_http_version 1.1;
gzip_vary on;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;
gzip_proxied any;
gzip_disable "msie6";
# Proxy settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header Set-Cookie;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
# Cloudflare https://www.cloudflare.com/ips
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 172.64.0.0/13;
#set_real_ip_from 2400:cb00::/32;
#set_real_ip_from 2606:4700::/32;
#set_real_ip_from 2803:f800::/32;
#set_real_ip_from 2405:b500::/32;
#set_real_ip_from 2405:8100::/32;
real_ip_header CF-Connecting-IP;
# SSL PCI Compliance
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
# Error pages
error_page 403 /error/403.html;
error_page 404 /error/404.html;
error_page 502 503 504 /error/50x.html;
# Cache
proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=512m;
proxy_cache_key "$host$request_uri $cookie_user";
proxy_temp_path /var/cache/nginx/temp;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_use_stale error timeout invalid_header http_502;
proxy_cache_valid any 3d;
map $http_cookie $no_cache {
default 0;
~SESS 1;
~wordpress_logged_in 1;
}
server {
location ~* \.(jpg|jpeg|png|gif|ico)$ {
log_not_found off;
access_log off;
}
}
# Wildcard include
include /etc/nginx/conf.d/*.conf;
# Измененяем параметры относительно Fastcgi-буферов
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
Code: Select all
server {
listen хх.хх.хх.хх:80;
server_name site_name.ru www.site_name.ru;
root /home/site_name/web/site_name.ru/public_html;
index index.php index.html index.htm;
access_log /var/log/nginx/domains/site_name.ru.log combined;
access_log /var/log/nginx/domains/site_name.ru.bytes bytes;
error_log /var/log/nginx/domains/site_name.ru.error.log error;
gzip on; # включаем сжатие gzip
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
location / {
if ($host ~* ^site_name\.ru$) {
rewrite ^(.*) http://www.site_name.ru$1 permanent;
break;
}
location / {
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args;
}
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires max;
}
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9002;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
}
error_page 403 /error/404.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;
location /error/ {
alias /home/site_name/web/site_name.ru/document_errors/;
}
location ~* "/\.(htaccess|htpasswd)$" {
deny all;
return 404;
}
include /etc/nginx/conf.d/phpmyadmin.inc*;
include /etc/nginx/conf.d/phppgadmin.inc*;
include /etc/nginx/conf.d/webmail.inc*;
include /home/site_name/conf/web/nginx.site_name.ru.conf*;
}
1. Что означает эта ошибка? Почему она возникает? В официальном руководстве wordpress конфиг такого же содержимого.
2. Если сервер используетя для множества сайтов на разных CMS правильно ли настройки для мультисайтинга wordpress описывать глобально? Может это делать в пользовательской директории?
3. Как правильно организовать wordpress-multisite в VESTA?
Re: Nginx+PHP-fpm+wordpress multisite
Короче, после длительных мытарств по всяким сайтам и рекомендациям на форумах, изучения вики nginx и тд отвечаю сам себе на вопрос, может кому мой ответ тоже будет полезным.
Вот работающий конфиг для мультисайтинга wordpress в режиме поддоменов. Половина в этом конфиге мне полнятна, половина - нет, так что буду рад рекомендациям грамотных людей - чего изменить, чего добавить, чего убрать. с кэшем, например не разобрался. (использую wp supercache)
Пути, IP, естественно меняем на свои.
Вот работающий конфиг для мультисайтинга wordpress в режиме поддоменов. Половина в этом конфиге мне полнятна, половина - нет, так что буду рад рекомендациям грамотных людей - чего изменить, чего добавить, чего убрать. с кэшем, например не разобрался. (использую wp supercache)
Пути, IP, естественно меняем на свои.
Code: Select all
server {
listen xxx.xxx.xx.xx:80;
server_name your_site.ru *.your_site.ru;
root /home/your_site/web/your_site.ru/public_html;
index index.php;
access_log /var/log/nginx/domains/your_site.ru.log combined;
access_log /var/log/nginx/domains/your_site.ru.bytes bytes;
error_log /var/log/nginx/domains/your_site.ru.error.log error;
# WordPress multisite rules.
# Designed to be included in any server {} block.
# This order might seem weird - this is attempted to match last if rules below fail.
# http://wiki.nginx.org/HttpCoreModule
location / {
try_files $uri $uri/ /index.php?$args;
}
# Directives to send expires headers and turn off 404 error logging.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
#avoid php readfile()
location ^~ /blogs.dir {
internal;
alias /home/your_site/web/your_site.ru/public_html/wp-content/blogs.dir ;
access_log off; log_not_found off; expires max;
}
# Uncomment one of the lines below for the appropriate caching plugin (if used).
#include global/wordpress-ms-subdir-wp-super-cache.conf;
#include global/wordpress-ms-subdir-w3-total-cache.conf;
# Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
# Zero-day exploit defense.
# http://forum.nginx.org/read.php?2,88845,page=3
# Won't work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
# Comment the 'try_files' line out if you set up php-fpm/php-fcgi on another machine. And then cross your fingers that you won't get hacked.
try_files $uri =404;
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9003;
error_page 403 /error/404.html;
error_page 404 /error/404.html;
error_page 500 502 503 504 /error/50x.html;
location ~* "/\.(htaccess|htpasswd)$" {
deny all;
return 404;
}
include /home/your_site/conf/web/nginx.your_site.ru.conf*;
}
}
}
Re: Nginx+PHP-fpm+wordpress multisite
Есть более простой вариант https://banochkin.com/blog/wordpress-mu ... -on-vesta/ )) 5 минут и готово.
Re: Nginx+PHP-fpm+wordpress multisite
Nginx PHP-fpm wordpress multisite vestacp
Методом проб и ошибок решил проблему
нужно было просто добавить в шаблон wordpress2
находится шаблон здесь /usr/local/vesta/data/templates/web/nginx/php-fpm
в любое место добавить
я добавил после слов
location = /favicon.ico {
log_not_found off;
access_log off;
}
вот этот код
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
А еще проще я создал новый шаблон просто скопировал с папки 2 файла
wordpress2.tpl
wordpress2.spl
переименовал в wordpress2-multisite.tpl и wordpress2-multisite.spl
добавил туда
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
и загрузил в /usr/local/vesta/data/templates/web/nginx/php-fpm то есть тамже где и брал
потом зашол в юзера под которым у меня сайт, перешел в раздел WEB нажал редактировать, потом кликнул раздел Шаблон WebNGINX и выбрал свой новый шаблон wordpress2-multisite
Специально зарегистрировался что бы написать. Ибо сам долго мучался
Предлагаю разработчикам создать такой шаблон в новом обновлении и будет всем радость )
У самого Nginx+PHP-fpm+wordpress multisite на Debian 9 + php7
1gb ram и все летает
Методом проб и ошибок решил проблему
нужно было просто добавить в шаблон wordpress2
находится шаблон здесь /usr/local/vesta/data/templates/web/nginx/php-fpm
в любое место добавить
я добавил после слов
location = /favicon.ico {
log_not_found off;
access_log off;
}
вот этот код
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
А еще проще я создал новый шаблон просто скопировал с папки 2 файла
wordpress2.tpl
wordpress2.spl
переименовал в wordpress2-multisite.tpl и wordpress2-multisite.spl
добавил туда
if (!-e $request_filename) {
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^(/[^/]+)?(/wp-.*) $2 last;
rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}
и загрузил в /usr/local/vesta/data/templates/web/nginx/php-fpm то есть тамже где и брал
потом зашол в юзера под которым у меня сайт, перешел в раздел WEB нажал редактировать, потом кликнул раздел Шаблон WebNGINX и выбрал свой новый шаблон wordpress2-multisite
Специально зарегистрировался что бы написать. Ибо сам долго мучался
Предлагаю разработчикам создать такой шаблон в новом обновлении и будет всем радость )
У самого Nginx+PHP-fpm+wordpress multisite на Debian 9 + php7
1gb ram и все летает