Page 1 of 1

Nginx+PHP-fpm+wordpress multisite

Posted: Tue Mar 15, 2016 10:12 am
by Agat
Помогите пожалуйста настроить 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 со следующим содержимым:

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 -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


Как я понимаю, ругается на это:

Code: Select all

location / {
	try_files $uri $uri/ /index.php?$args;
}
Содержимое etc/nginx/nginx.conf

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;

}
Содержимое home/site_name/conf/web/nginx.conf

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

Posted: Thu Mar 17, 2016 12:51 am
by Agat
Короче, после длительных мытарств по всяким сайтам и рекомендациям на форумах, изучения вики nginx и тд отвечаю сам себе на вопрос, может кому мой ответ тоже будет полезным.

Вот работающий конфиг для мультисайтинга 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

Posted: Fri Oct 28, 2016 10:40 pm
by Banochkin
Есть более простой вариант https://banochkin.com/blog/wordpress-mu ... -on-vesta/ )) 5 минут и готово.

Re: Nginx+PHP-fpm+wordpress multisite

Posted: Sat Feb 24, 2018 5:32 pm
by savvatin
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 и все летает