Ускоряем XenForo: включаем кэширование

Smalesh спасибо за замечания. С тех пор, как опубликовал статью, конфиг уже много раз поправлял, там всякие старые отладочные значения закрались к сожалению.
Так обновите статью ;) многие же наткнувшись на нее тупо скопипастят конфиги и все...
 
Последнее редактирование:
Так обновите статью ;) многие же наткнувшись на нее тупо скопипастят конфиги и все...
Кое что поправил. Но даже если тупо скопипастят, все будет нормально работать. Этот конфиг не истина в последней инстанции, каждый на его основе может заточить свой собственный под свои нужды.

На данный момент у меня все работает нормально, особых проблем ни в скорости ни в стабильности нет.
Единственно, в error_log часто вижу ошибку типа:

2017/06/21 03:41:56 [error] 22362#0: *884675 open() "/var/www/html/https:/forum.domain.com/styles/companystyle/images/logo.svg" failed (2: No such file or directory), client: xxx.xxx.xxx.xxx, server: forum.domain.com, request: "GET / HTTP/1.1", host: "forum.domain.com", referrer: " "

Smalesh видя мой конфиг, можете помочь разобраться, откуда этот лишний слэш появляется? Никак найти не могу.
 
Smalesh видя мой конфиг, можете помочь разобраться, откуда этот лишний слэш появляется? Никак найти не могу.
Слеш приходит с запросом, следовательно конфиг здесь не при чем. Смотреть надо сам движок, точнее шаблоны. Вангую, что где-то путь к лого прописан не относительный, а абсолютный (что само по себе есть порочная практика).

Но даже если тупо скопипастят, все будет нормально работать
Не будет. 404-я, таймауты, прочее.
 
  • Мне нравится
Реакции: Hope
Слеш приходит с запросом, следовательно конфиг здесь не при чем. Смотреть надо сам движок, точнее шаблоны. Вангую, что где-то путь к лого прописан не относительный, а абсолютный (что само по себе есть порочная практика).
Путь относительный, проверял уже много раз. Да и не только для logo.svg это проявляется. Например, для avatar_s.png и еще чего-то подобного.
Не будет. 404-я, таймауты, прочее.
Ничего подобного не наблюдается уже месяца три на не самом, прямо скажем, маленьком форуме.
 
Ничего подобного не наблюдается уже месяца три на не самом, прямо скажем, маленьком форуме.
Да, конечно. Ведь никто не аттачит файлы выше 1 мб (ныне 5 мб) и не создает темы, начинающиеся на library. К слову, large_client_header_buffers и в дефолте не высокий, а его еще ниже плинтуса загнали (а с последними правками пробили дно).

И вишенка на тортик, имеющая отношение к этой теме, то бишь кешированию. Конфигурация на хабре имеет уязвимость, используя которую можно перехватить сессию любого пользователя, включая админа. Суть ее заключается в том, что мемкеш по дефолту запускается на *:11211, т.е. при определенных условиях (настройки фаерволла) будет доступен снаружи. Чтобы избежать этого, нужно прибить мемкеш к 127.0.0.1, пример для центоса
Код:
# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="2000"
CACHESIZE="4096"
OPTIONS="-l 127.0.0.1"
 
Конфигурация на хабре имеет уязвимость, используя которую можно перехватить сессию любого пользователя, включая админа.
Да, давно устранил это:

# ps ax | grep memcach
23629 ? Ssl 0:00 /usr/bin/memcached -u memcached -p 11211 -m 1024 -c 2048 -l 127.0.0.1

Обновил статью.

Ведь никто не аттачит файлы выше 1 мб (ныне 5 мб) и не создает темы, начинающиеся на library. К слову, large_client_header_buffers и в дефолте не высокий, а его еще ниже плинтуса загнали (а с последними правками пробили дно).
Не аттачит. Специфика форума этого не предполагает.
Для чего large_client_header_buffers делать высоким? Сколько примеров конфигов смотрел, описаний не читал, никто его высоко не задирает. Что у меня должно сломаться с текущими значениями и почему я этого несчастья не вижу?
 
Не аттачит. Специфика форума этого не предполагает.
И что? Большинство форумов имеют другие потребности.

Для чего large_client_header_buffers делать высоким? Сколько примеров конфигов смотрел, описаний не читал, никто его высоко не задирает. Что у меня должно сломаться с текущими значениями и почему я этого несчастья не вижу?
А достаточно почитать документацию
Задаёт максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по мере необходимости. По умолчанию размер одного буфера равен 8K байт. Если по окончании обработки запроса соединение переходит в состояние keep-alive, эти буферы освобождаются.
Ни разу не встречал в своей практике необходимости занижать значения, наборот, приходилось поднимать (например длинный урл). К тому же, если уж чешется покрутить директиву, крутим на уровне server, а не глобально, где можно поломать соседние хосты.

Типовый шаблон весты, используемый мной под xenforo, выглядит примерено так (https-часть шаблона)
Код:
server {
    listen      %ip%:%web_ssl_port% ssl http2;
    server_name %domain_idn% %alias_idn%;
    root        %sdocroot%;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/%domain%.log combined;
    access_log  /var/log/nginx/domains/%domain%.bytes bytes;
    error_log   /var/log/nginx/domains/%domain%.error.log error;

    ssl         on;
    ssl_certificate      %ssl_pem%;
    ssl_certificate_key  %ssl_key%;

    if ($bad_bot) { return 403; }
    if ($bad_ip) { return 444; }
 
    if ($host != %domain_idn%) {
        return 301 https://%domain_idn%$request_uri;
        }
 
    location / {
        limit_req zone=main burst=75 nodelay;
        try_files $uri $uri/ /index.php?$uri&$args;
        }
 
    location ~ /(internal_data|library)/ {
         internal;
        }    
            
    location /admin.php {
        allow 127.0.0.1;
        deny all;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass    %backend_lsnr%;
        fastcgi_index   index.php;
        include         /etc/nginx/fastcgi_params;
        include %home%/%user%/web/%domain%/private/admin.conf*;
        }
 
    location /install/ {
        allow 127.0.0.1;
        deny all;
            location ~ \.php$ {
            try_files $uri = 404;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_pass    127.0.0.1:9002;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
            }
        include %home%/%user%/web/%domain%/private/install.conf*;
        } 

    location ~ \.php$ {
        limit_req zone=flood burst=25 nodelay;
        try_files $uri = 404;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass    %backend_lsnr%;
        fastcgi_index   index.php;
        include         /etc/nginx/fastcgi_params;
        include %home%/%user%/web/%domain%/private/php.conf*;    
        }
        
    error_page  500 502 503 504 /error/50x.html;

    location /error/ {
        alias   %home%/%user%/web/%domain%/document_errors/;
        }

    include /etc/nginx/inc/static.conf;
    include /etc/nginx/inc/pagespeed.conf;
    include /etc/nginx/inc/block.conf;
    include /etc/nginx/inc/drop.conf;
    include /etc/nginx/inc/module.conf;

    include     %home%/%user%/conf/web/snginx.%domain_idn%.conf*;
}
Даю для примера.
 
Последнее редактирование:
Доброго всем дня!
Осваиваюсь с XenForo - столкнулся вчера с проблемами кеширования на PHP7 под Debian.
Пытался сначала как обычно выполнить требования, вылезающие в строке ошибок, мол нет memcache, а memcached не подходит!
Не вышло :-)
Компилировать в лоб pecl не вышло
# pecl install memcache
выдаёт требование include "ext/standard/php_smart_str.h" - вместо имеющегося чуть другого имени согласно 7.0
OpCache понятно - включился, несколько ускорил работу (вместо 9 запросов типичных стало 7), но хочется полноценной работы :-)
APC кстати тоже "превратился" в apcu и отказался подхватываться движком форума.
Только сегодня, сейчас - подключил наконец Memcache - спасибо статье про Переезд страницей раньше!
$config['cache']['backend']='Libmemcached';
эта строка вроде подхватилась как родная, ура!
Остальное - Nginx и php7.0-fpm и по моему Imagic - получилось на 7.0 использовать без особых сложностей, лишь подключил репозиторий..

"Итого", конфиг такой, соберу в одном месте актуальный:

PHP:
$config['cache']['enabled'] = true;
$config['cache']['cacheSessions'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions'] = array(
'caching' => true,
'automatic_serialization' => true,
'lifetime' => 3300,
'cache_id_prefix' => 'xf_'
);

$config['cache']['backend']='Libmemcached';
$config['cache']['backendOptions'] = array(
'backendOptions' => array(
'compression' => false,
'servers' => array(
array(
// your memcached server ip /address
'host' => 'localhost',

// memcached port
'port' => 11211,
)
)
)
);
Поправляю - сейчас 9 запросов на главной и 7-8 в темах и разделах.
Отключил полностью кеширование - получается 13 на главной и 12-10 в темах и разделах.
Время - не совсем понятно:
Время: Память: 2,228 МБ Запросов к БД: 13
Это без кеширования!
С ним:
Время: Память: 2,237 МБ Запросов к БД: 9
Это главная.
И без сжатия, сейчас ещё с ним поиграюсь!
 
Последнее редактирование:
OpCache понятно - включился, несколько ускорил работу (вместо 9 запросов типичных стало 7), но хочется полноценной работы :-)
Opcache не так работает.

Пытался сначала как обычно выполнить требования, вылезающие в строке ошибок, мол нет memcache, а memcached не подходит!
Есть два вида расширений для работы с демоном memcached - это php-memcache и php-memcached.
2017.07.20_10h39m37s_043_.png
Первый (хоть и древний, но пока еще в tru-репозиториях есть) подключается как
PHP:
$config['cache']['backend']='Memcached';
второй подключается как
PHP:
$config['cache']['backend']='Libmemcached';
 
Opcache не так работает.
Не так.
Но - уменьшил число запросов.
Я вчера пробовал, оставил временно OPcache и наблюдал _в том числе_ снижение числа запросов.
Хотя понятно - механизм работы другой, полностью согласен.



Есть два вида расширений для работы с демоном memcached - это php-memcache и php-memcached.
Посмотреть вложение 72568
Первый (хоть и древний, но пока еще в tru-репозиториях есть) подключается как
PHP:
$config['cache']['backend']='Memcached';
второй подключается как
PHP:
$config['cache']['backend']='Libmemcached';

Снова согласен!
Но - у меня с 7 PHP подтянулся из dotdeb именно второй, который подключился лишь вторым вариантом.
Я не знал, поэтому настойчиво пытался как-то потянуть memcache, - а это не получалось..
Сочетание двух мелочей ввело меня в заблуждение.
An exception occurred: The memcache extension must be loaded for using this backend ! in /home/***/public_shtml/forum/library/Zend/Cache.php on line 209
- при том, что php7.0-memcached был установлен ,и ДЛЕ например - вполне с ним работает.
 
помогите
конфиг
<?php

$config['db']['host'] = 'localhost';
$config['db']['port'] = '3306';
$config['db']['username'] = 'root';
$config['db']['password'] = '';
$config['db']['dbname'] = 'forum';


$config['superAdmins'] = '1';
$config['cache']['enabled'] = true;
$config['cache']['cacheSessions'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions'] = array(
'caching' => true,
'automatic_serialization' => true,
'lifetime' => 3600,
'cache_id_prefix' => 'xf_'
);
$config['cache']['backend'] = 'Libmemcached';
$config['cache']['backendOptions'] = array(
'compression' => false,
'servers' => array(
array(
'host' => '127.0.0.1',
'port' => 11211,
)
)
);
получаю An unexpected error occurred. Please try again later.
устанавливал memcached так sudo apt install memcached libmemcached-tools
порт 11211 не занят
ubuntu 16.04 php7.2 apache2
 
помогите
конфиг
<?php

$config['db']['host'] = 'localhost';
$config['db']['port'] = '3306';
$config['db']['username'] = 'root';
$config['db']['password'] = '';
$config['db']['dbname'] = 'forum';


$config['superAdmins'] = '1';
$config['cache']['enabled'] = true;
$config['cache']['cacheSessions'] = true;
$config['cache']['frontend'] = 'Core';
$config['cache']['frontendOptions'] = array(
'caching' => true,
'automatic_serialization' => true,
'lifetime' => 3600,
'cache_id_prefix' => 'xf_'
);
$config['cache']['backend'] = 'Libmemcached';
$config['cache']['backendOptions'] = array(
'compression' => false,
'servers' => array(
array(
'host' => '127.0.0.1',
'port' => 11211,
)
)
);
получаю An unexpected error occurred. Please try again later.
устанавливал memcached так sudo apt install memcached libmemcached-tools
порт 11211 не занят
ubuntu 16.04 php7.2 apache2
$config['cache']['enabled'] = true;
$config['cache']['provider'] = 'Memcached';
$config['cache']['config'] = [
'server' => '127.0.0.1'
];

Не заметил что 1-я ветка )
 
Последнее редактирование:
Я правильно понимаю, что добавляю в src/config.php данный код ниже, и настраиваю на сервере Memcached и всё? Подскажите как правильно настроить. v2.2.15

$config['cache']['enabled'] = true;
$config['cache']['provider'] = 'Memcached';
$config['cache']['config'] = [
'server' => '127.0.0.1'
];
 
Follover,
оЙ Спасибо, а то я такой не внимательный. Я это читал, но понял только одно и спрашиваю здесь, правильно я понял или нет. Я в этом вообще ни чего не понимаю в настройках кеша, и нужна помощь. Если не можете помочь, проходите мимо.

Я правильно понимаю, что добавляю в src/config.php данный код ниже, и настраиваю на сервере Memcached и всё? Подскажите как правильно настроить. v2.2.15

$config['cache']['enabled'] = true;
$config['cache']['provider'] = 'Memcached';
$config['cache']['config'] = [
'server' => '127.0.0.1'
];
 
добавляю в src/config.php данный код

$config['cache']['enabled'] = true;
$config['cache']['provider'] = 'Memcached';
$config['cache']['config'] = [
'server' => '127.0.0.1'
];

На самом сервере установлен Memcached

Включаю данные настройки
2024-04-11_21-13-56.png

И всё. Приехали. Сайт застрелился к чертям. По этому и спрашиваю, если кто сможет помочь буду благодарен.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу