ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Установка WordPress + W3TotalCache с LEMP на CentOS для достижения максимальной производительности

Установка WordPress + W3TotalCache с LEMP на CentOS для достижения максимальной производительности

Nginx является свободным высокопроизводительным HTTP веб-сервером с , открытым исходным кодом, который в отличие от некоторых других веб-серверов, не полагается на поточные обращения с запросами, вместо этого он использует гораздо более масштабируемые управляемые события ( асинхронную ) архитектуру.

При этом используется очень небольшое и предсказуемое количество памяти при большой нагрузке. Nginx в сочетании с простым и очень надежным FastCGI Process для PHP ( PHP-FPM ) и самым популярным сервером баз данных MySQL может дать вам много производительности, используя небольшой объем памяти.

Статья разделена на следующие разделы:

Перед тем как приступить к установке, запустите сеанс, выполнив:
screen -U -S lemp-stack

 

После того, как вы находитесь в сессии экрана, убедитесь , что ваш CentOS полностью обновлен, выполнив:

yum update

 

если у вас есть Apache установлен на вашем VPS, остановите его и удалите его, выполнив следующую команду:

/etc/init.d/httpd stop
yum remove httpd

 

ШАГ 1) Установка и настройка Nginx

 

Включите репозиторий Epel, выполнив:

Узнать свой VPS архитектуру можно запустив

uname -m

 

– 32-разрядные VPS:

wget -P /tmp http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -Uvh /tmp/epel-release-6-8.noarch.rpm
rm -f /tmp/epel-release-6-8.noarch.rpm

 

– 64-разрядные VPS:

wget -P /tmp http://mirror.itc.virginia.edu/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh /tmp/epel-release-6-8.noarch.rpm
rm -f /tmp/epel-release-6-8.noarch.rpm

 

 

Установите Nginx помощью команды yum:

yum install nginx

 

Перейдите в каталог конфигурации Nginx /etc/nginx/ и отредактируйте nginx.conf текстовым редактором:

cd /etc/nginx/
vim nginx.conf

 

user              nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log;
#error_log  /var/log/nginx/error.log  notice;
#error_log  /var/log/nginx/error.log  info;

pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  30;
    server_tokens off;

    gzip on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    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;

    # enabled sites
    include /etc/nginx/sites-enabled/*;

}

 

Создайте каталоги sites-enabled и sites-available внутри директории /etc/nginx:

mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled

 

Настройте по умолчанию директиву виртуального хоста Nginx, добавив следующую строку в файл /etc/nginx/sites-available/default.conf

server {
    listen       80 default_server;
    server_name  _;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

 

Включите директиву виртуального хоста Nginx по умолчанию путем создания символической ссылки на конфигурации по умолчанию в /etc/nginx/sites-enabled/

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/default.conf

 

Тестовая конфигурация Nginx, добавьте его в запуск системы и, наконец, запустите его с помощью:

nginx -t
/etc/init.d/nginx restart
chkconfig nginx on

 


ШАГ 2) Установка и настройка MySQL

 

Установите сервер баз данных MySQL, запустите и добавьте его в запуск системы, выполнив следующие команды:

yum install mysql mysql-server
service mysqld restart
chkconfig mysqld on

 

Затем выполните команду ниже для MySQL, чтобы защитить установку

## mysql_secure_installation

 

Enter current password for root (enter for none):
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

 

Убедитесь, что ваш MySQL не подвергается прослушке на общественном IP вашего сервера, добавив следующее /etc/my.cnf

vim /etc/my.cnf

[mysqld]
bind-address = 127.0.0.1
...

 

Перезапустите сервер базы данных для того, чтобы изменения вступили в силу с помощью:

/etc/init.d/mysqld restart

 


ШАГ 3) Установка и настройка PHP-FPM

 

Установите PHP-FPM и некоторые полезные расширения PHP, выполнив команду ниже:

yum install php-fpm php-mysql php-gd php-mcrypt

 

Отредактируйте /etc/php.ini и измените/раскомментируйте следующее:

cgi.fix_pathinfo=0
date.timezone = "your timezone"
memory_limit = 64M
expose_php = Off

 

Следующее, отредактируйте файл конфигурации /etc/php-fpm.conf в своем редакторе и раскомментируйте следующие действия :

emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10

 

Пул PHP-FPM создан в /etc/php-fpm.d/www.conf:

mv /etc/php-fpm.d/www.conf /root/
## vim /etc/php-fpm.d/www.conf

 

[wordpress]
;listen = 127.0.0.1:9001
listen = /var/run/php-wordpress.socket
user = nginx
group = nginx
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/blogcms.log
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 400
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_admin_value[error_log] = /var/log/php-fpm/wordpress-error.log
php_admin_flag[log_errors] = on

 

Перезагрузите PHP-FPM и добавить его в запуске системы:

/etc/init.d/php-fpm restart
chkconfig php-fpm on

 


В этот момент вы должны иметь Nginx , MySQL и PHP-FPM работающие на сервере. Продолжим создание директивы для вашего виртуальный хоста приложения WordPress:

vim /etc/nginx/sites-available/my-wordpress.ru.conf

 

server {
        listen 80;
        server_name my-wordpress.ru;
        rewrite ^(.*) http://www.my-wordpress.ru$1 permanent;
}

server {
        listen 80;
        server_name www.my-wordpress.ru;

        client_max_body_size 5m;
        client_body_timeout 60;

        access_log /var/log/nginx/my-wordpress.ru-access;
        error_log /var/log/nginx/my-wordpress.ru-error error;

        root /var/www/html/my-wordpress.ru/;
        index  index.html index.php;

        ### root directory ###
        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        ### security ###
        error_page 403 =404;
        location ~ /\. { access_log off; log_not_found off; deny all; }
        location ~ ~$ { access_log off; log_not_found off; deny all; }
        location ~* wp-admin/includes { deny all; }
        location ~* wp-includes/theme-compat/ { deny all; }
        location ~* wp-includes/js/tinymce/langs/.*\.php { deny all; }
        location /wp-includes/ { internal; }
        #location ~* wp-config.php { deny all; }
        location ~* ^/wp-content/uploads/.*.(html|htm|shtml|php)$ {
                types { }
                default_type text/plain;
        }

        #  location ~* wp-admin {
        #      allow <YOUR_IP>;
        #      allow 127.0.0.1;
        #      deny all;
        #  }

        ### disable logging ###
        location = /robots.txt { access_log off; log_not_found off; }
        location = /favicon.ico { access_log off; log_not_found off; }

        ### caches ###
        location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ { access_log off; expires max; }
        location ~* \.(woff|svg)$ { access_log off; log_not_found off; expires 30d; }
        location ~* \.(js)$ { access_log off; log_not_found off; expires 7d; }

        ### php block ###
        location ~ \.php?$ {
                try_files $uri =404;
                include fastcgi_params;
                #fastcgi_pass 127.0.0.1:9001;
                fastcgi_pass unix:/var/run/php-wordpress.socket;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_intercept_errors on;
                fastcgi_split_path_info ^(.+\.php)(.*)$;
                #Prevent version info leakage
                fastcgi_hide_header X-Powered-By;
        }
}

 

Включим директиву виртуального хоста и перезапустим Nginx, выполнив следующие команды:

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/my-wordpress.tld.conf
nginx -t
/etc/init.d/nginx restart

 

Протестируем PHP-FPM путем создания скрипта PHP info.php в документе /var/www/html/my-wordpress.ru/:

mkdir -p /var/www/html/my-wordpress.ru/
cd /var/www/html/my-wordpress.ru/
echo -e "<?php\n\tphpinfo();\n" > info.php

 

доступ для проверки вашего PHP-FPM: http://my-wordpress.ru/info.php

ШАГ 4) Настройка WordPress

 

Следующим шагом является установка WordPress внутри корня документа в /var/www/html/my-wordpress.ru/. Перед установкой WordPress, давайте сначала создадим базу данных MySQL, выполнив следующее:

mysql -u root -p

 

mysql> create database wordpressDB;
mysql> grant all on wordpressDB.* to wpUser@localhost identified by 'YOUR_PASS';
mysql> quit

 

cd /var/www/html/my-wordpress.ru/
wget http://wordpress.org/latest.zip
unzip latest.zip
mv wordpress/* .
rm -rf latest.zip wordpress/

 

Далее, скопируйте пример конфигурации в WordPress и информацию по настройкам базы данных MySQL:

cp wp-config-sample.php wp-config.php
vim wp-config.php

 

define('DB_NAME', 'wordpressDB');
define('DB_USER', 'wpUser');
define('DB_PASSWORD', 'YOUR_PASS');

 

chown nginx: -R /var/www/html/my-wordpress.ru/

 

откройте http://my-wordpress.ru и завершите установку WordPress


ШАГ 5) Настройте кэширование для лучшей производительности

 

Установка PHP-APC (Alternative PHP Cache), выполнив:

yum install php-pecl-apc

 

После установки APC, добавьте следующие строки в /etc/php.d/apc.ini

cat > /etc/php.d/apc.ini

 

extension = apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.num_files_hint=1024
apc.user_entries_hint=4096
apc.ttl=7200
apc.use_request_time=1
apc.user_ttl=7200
apc.gc_ttl=3600
apc.cache_by_default=1
apc.filters
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.file_update_protection=2
apc.enable_cli=0
apc.max_file_size=1M
apc.stat=1
apc.stat_ctime=0
apc.canonicalize=0
apc.write_lock=1
apc.report_autofilter=0
apc.rfc1867=0
apc.rfc1867_prefix =upload_
apc.rfc1867_name=APC_UPLOAD_PROGRESS
apc.rfc1867_freq=0
apc.rfc1867_ttl=3600
apc.include_once_override=0
apc.lazy_classes=0
apc.lazy_functions=0
apc.coredump_unmap=0
apc.file_md5=0
apc.preload_path

 

и перезапустите PHP-FPM для того, чтобы изменения вступили в силу.

/etc/init.d/php-fpm restart

 

проверьте загрузку APC командой:

php -m | grep -w apc

 

или открыв скрипт info.php в корне документа.

Следующее, что нужно сделать, это войти в свою админку WordPress и установить плагин W3 Total Cache. Для работы плагина W3 Total Cache вы должны сначала включить SEO дружественную структуру Url.

Настройки->Постоянные ссылки->Произвольно:

http://my-wordpress.tld/%postname%/

 

а затем продолжить установку W3 Total Cache. После установки, перейдите

Performance->General Settings

и включите / отключите следующие параметры:

Page cache: enabled
Page cache method: Disk: Enhaced

Minify: disabled

Database Cache: enabled
Database Cache Method: Opcode: Alternative PHP Cache (APC)

Object Cache: enbabled
Object Cache Method: Opcode: Alternative PHP Cache (APC)

Browser Cache: disabled

CDN: this is up to you.

 

Нажмите , Save all settings чтобы сохранить изменения.

Добавьте следующую строку в /var/www/html/my-wordpress.tld/nginx.conf

cat > /var/www/html/my-wordpress.ru/nginx.conf

 

# BEGIN W3TC Page Cache cache
location ~ /wp-content/cache/page_enhanced.*html$ {
    add_header Vary Cookie;
}
# END W3TC Page Cache cache
# BEGIN W3TC Page Cache core
set $w3tc_rewrite 1;
if ($request_method = POST) {
    set $w3tc_rewrite 0;
}
if ($query_string != "") {
    set $w3tc_rewrite 0;
}
if ($request_uri !~ \/$) {
    set $w3tc_rewrite 0;
}
if ($http_cookie ~* "(comment_author|wp\-postpass|w3tc_logged_out|wordpress_logged_in|wptouch_switch_toggle)") {
    set $w3tc_rewrite 0;
}
if (!-f "$document_root/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html") {
  set $w3tc_rewrite 0;
}
if ($w3tc_rewrite = 1) {
    rewrite .* "/wp-content/cache/page_enhanced/$http_host/$request_uri/_index.html" last;
}
# END W3TC Page Cache core

 

убедитесь, что право собственности на корень документа в порядке, путем:

chown nginx: -R /var/www/html/my-wordpress.ru/

 

На следующем шаге мы должны сказать Nginx, использовать файл конфигурации. Отредактируем файл /etc/nginx/sites-enabled/my-wordpress.ru.conf и добавим/ раскомментируем следующее:

include /var/www/html/my-wordpress.ru/nginx.conf;
...
location ~* wp-config.php { deny all; }

 

Тестируем файл конфигурации Nginx и перезапустим его для того, чтобы изменения вступили в силу, выполнив:

nginx -t
/etc/init.d/nginx restart

 

Вы также можете отредактировать файл конфигурации WordPress /var/www/html/my-wordpress.ru/wp-config.php и определить следующие параметры, WordPress не будет запрашивать базу данных для URL сайта:

define('WP_HOME', 'http://my-wordpress.ru');
define('WP_SITEURL', 'http://my-wordpress.ru');

Установка WordPress + W3TotalCache с LEMP на CentOS для достижения максимальной производительности

Exit mobile version