Общие Вопросы По Настройке Серверов

Всем привет!

Нашел ахренительно дешевый и вроде как быстрый VPS хостинг (по крайней мере сравнение времени ответа магазина на ihor.ru и этом показывает выигрыш в ПЯТЬ РАЗ). Полкз все сам настраивать, вроде все настроил и заработало. Но уперся в NginX. Скажите мне, вот эта статья актуальна?

http://www.cs-cart.ru/docs/4.3.x/install/vps/nginx/

Ибо я сразу споткнулся что у меня нет

Найдите на сервере и откройте файл:

/etc/nginx/sites-available/default

Но есть

/etc/nginx/conf.d/default.conf

И в нем

server {
    listen       80;
    server_name  localhost;
    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

Означает ли это что:

1. У меня по факту не работае ваще NginX?

2. Надо все переделывать как в статье Баженова?

Но у меня на этой машине несколько сайтов...

И нет ли где какого-свежего мануала по настройке centos?

Спасибо!

Инструкция в официальной документации несколько устарела и местами не соответствует действительности. Полагаю, однажды я найду время отправить коллегам PR.

Судя по вашему описанию, у вас работает виртуальный хост localhost, который раздаёт статические файлы из каталоге /usr/share/nginx/html. Для работы магазина на CS-Cart этого недостаточно.

Несколько способов настроить веб-сервер на вашем VPS:

- Воспользоваться Ansible-сценариями от команды CS-Cart. К сожалению, проект плохо поддерживается, однако для CentOS оно должно работать. Если у вас возникнут вопросы, я с удовольствием проконсультирую по Ansible. Наша команда готовит альтернативные сценарии на SaltStack для автоконфигурирования серверов CentOS/RHEL/Scientific Linux.

- Установить панель управления ISPManager, cPanel, и пр. и забыть о проблемах. К сожалению, это чревато тем, что более тонкие настройки всё равно придётся вносить вручную и как-нибудь «дружить» с панелями управления.

- Обратиться к профессионалам (мы готовы вам помочь — напишите на sales@simtechdev.com).

- Настроить самостоятельно.

Если вы будете настраивать самостоятельно, я рекомендую воспользоваться связкой NGINX + Apache (mod_php SAPI), чтобы не испытывать проблем при переписывании правил Apache под NGINX. Описывать каждый шаг достаточно долго, потому раскрою только основные моменты при работе с CentOS:

1. Подключите репозитории epel-release и remi-release.

2. Установите NGINX, настройте каждый виртуальный хост (/etc/nginx/conf.d/*.conf) согласно этому образцу:

upstream apache {
    server 127.0.0.1:8080 max_fails=0;
}

server {
listen 80;

server_name example.com;
server_name www.example.com;

root /var/www/html/example.com;

client_max_body_size 100m;
    
location @backend {
    proxy_pass http://apache;
    proxy_set_header Host            $host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location / {
    try_files /maintenance.html @backend;

    location ~* \.(jpeg|ico|jpg|gif|png|css|js|pdf|txt|tar|wof|csv|zip) {
        access_log off;
        try_files $uri @backend;
        expires max;
        add_header Access-Control-Allow-Origin *;
        add_header Cache-Control public;
    }
}

}

3. Установите httpd, повесьте его на другой порт (например, 127.0.0.1:8080) и отредактируйте виртуальные хосты (/etc/httpd/conf.d/*.conf) по шаблону:
    
    ServerAdmin root@example.com
    ServerName example.com
    ServerAlias www.example.com
ServerSignature Off

CustomLog /var/log/httpd/access.log combined
ErrorLog /var/log/httpd/error.log
LogLevel  warn

DocumentRoot /var/www/html/example.com

<Directory />
    Options -Indexes +MultiViews +FollowSymlinks +SymLinksIfOwnerMatch +IncludesNoExec
    AllowOverride All
</Directory>

<Directory /var/www/html/example.com>
    Options -Indexes +MultiViews +FollowSymlinks +SymLinksIfOwnerMatch +IncludesNoExec
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

<Directory ~ ".*\.svn">
    Order allow,deny
    Deny from all
    Satisfy All
</Directory>

<Directory ~ ".*\.git">
    Order allow,deny
    Deny from all
    Satisfy All
</Directory>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
</IfModule>

<IfModule mod_headers.c>
    <FilesMatch "\.(jpg|jpeg|gif|png|js|css)$">
        Header set Cache-control "public, max-age=86400"
    </FilesMatch>

    <FilesMatch "\.(ttf|ttc|otf|eot|woff|css)$">
        Header set Access-Control-Allow-Origin "*"
    </FilesMatch>
</IfModule>

<IfModule mod_setenvif.c>
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

4. Перезагружайте каждый из веб-серверов.

5. Готово.

Разумеется, в работе есть много нюансов, потому качественную настройку я рекомендую доверить специалистам.

Ээээм... Я, наверное, не совсем точно выразился... У меня УЖЕ все работает. Как это было:

- от хостера я поставил связку CentOS + VestaCP. Взглянув на процессы я увидел, что NginX уже там есть.

- руками я обновил версию ПХП до 5.6, было 5.3

- руками установил imagic, его не было.

Запустил CS-Cart (точнее - скопировал действующий магазин) на тестовом домене и сравнил с существующим хостингом - прирост производительности в плане времени отклика в 5 раз (с 2000 мс до 350-400 и даже 250 мс на страницу каталога).

Ответ сервера говорит что

  • Servernginx
  • DateThu, 01 Sep 2016 17:38:57 GMT
  • Content-Typetext/html; charset=utf-8
  • Content-Length19312
  • Connectionkeep-alive
  • Keep-Alivetimeout=60
  • X-Powered-ByPHP/5.6.25RC1
  • Expires-1
  • Last-ModifiedThu, 01 Sep 2016 17:38:57 GMT
  • Cache-Controlno-store, no-cache, must-revalidate, post-check=0, pre-check=0
  • Pragmano-cache
  • VaryAccept-Encoding,User-Agent
  • Content-Encodinggzip

То есть мне хочется что-то ДО настроить. С нуля я бы конечно даже и не дергался бы ибо туп по жизни...

Ээээм... Я, наверное, не совсем точно выразился... У меня УЖЕ все работает. Как это было:

- от хостера я поставил связку CentOS + VestaCP. Взглянув на процессы я увидел, что NginX уже там есть.

- руками я обновил версию ПХП до 5.6, было 5.3

- руками установил imagic, его не было.

Запустил CS-Cart (точнее - скопировал действующий магазин) на тестовом домене и сравнил с существующим хостингом - прирост производительности в плане времени отклика в 5 раз (с 2000 мс до 350-400 и даже 250 мс на страницу каталога).

Ответ сервера говорит что

  • Servernginx
  • DateThu, 01 Sep 2016 17:38:57 GMT
  • Content-Typetext/html; charset=utf-8
  • Content-Length19312
  • Connectionkeep-alive
  • Keep-Alivetimeout=60
  • X-Powered-ByPHP/5.6.25RC1
  • Expires-1
  • Last-ModifiedThu, 01 Sep 2016 17:38:57 GMT
  • Cache-Controlno-store, no-cache, must-revalidate, post-check=0, pre-check=0
  • Pragmano-cache
  • VaryAccept-Encoding,User-Agent
  • Content-Encodinggzip

То есть мне хочется что-то ДО настроить. С нуля я бы конечно даже и не дергался бы ибо туп по жизни...

Расскажите что вам интересно донастроить и какую цель преследуете.

"каждый виртуальный хост (/etc/nginx/conf.d/*.conf)" если можно... Виртуальный хост - это что? Это айпи адрес? Или отдельная папка домена? У меня тут:

194.135.93.147.conf​ - мой айпи

default.conf

example_ssl.conf​ - не пользуюсь ССЛ

status.conf​ - фиг знает что это

vesta.conf - это панель как я понял.

А... тупойещетупее... Вот оно что:

vesta.conf

server {
    listen      194.135.93.147:80;
    server_name stencil-library.ru www.stencil-library.ru stlib.ru www.stlib.ru stencillibrary.ru www.stencillibrary.ru xn--80aamdb4a2ajcfmfw.xn--p1ai www.xn--80aamdb4a2ajcfmfw.xn--p1ai 9879799.ru www.9789799.ru;
    error_log  /var/log/httpd/domains/stencil-library.ru.error.log error;
    location / {
        proxy_pass      http://194.135.93.147:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/admin/web/stencil-library.ru/public_html;
            access_log     /var/log/httpd/domains/stencil-library.ru.log combined;
            access_log     /var/log/httpd/domains/stencil-library.ru.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   /home/admin/web/stencil-library.ru/document_errors/;
    }
    location @fallback {
        proxy_pass      http://194.135.93.147:8080;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include /home/admin/conf/web/nginx.stencil-library.ru.conf*;
}
server {
    listen      194.135.93.147:80;
    server_name stencilempire.com www.stencilempire.com;
    error_log  /var/log/httpd/domains/stencilempire.com.error.log error;
    location / {
        proxy_pass      http://194.135.93.147:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/admin/web/stencilempire.com/public_html;
            access_log     /var/log/httpd/domains/stencilempire.com.log combined;
            access_log     /var/log/httpd/domains/stencilempire.com.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   /home/admin/web/stencilempire.com/document_errors/;
    }
    location @fallback {
        proxy_pass      http://194.135.93.147:8080;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include /home/admin/conf/web/nginx.stencilempire.com.conf*;
}
server {
    listen      194.135.93.147:80;
    server_name szablondeko.pl www.szablondeko.pl;
    error_log  /var/log/httpd/domains/szablondeko.pl.error.log error;
    location / {
        proxy_pass      http://194.135.93.147:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/admin/web/szablondeko.pl/public_html;
            access_log     /var/log/httpd/domains/szablondeko.pl.log combined;
            access_log     /var/log/httpd/domains/szablondeko.pl.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   /home/admin/web/szablondeko.pl/document_errors/;
    }
    location @fallback {
        proxy_pass      http://194.135.93.147:8080;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include /home/admin/conf/web/nginx.szablondeko.pl.conf*;
}
server {
    listen      194.135.93.147:80;
    server_name diapaint.ru www.diapaint.ru 5diy.ru www.5diy.ru;
    error_log  /var/log/httpd/domains/diapaint.ru.error.log error;
    location / {
        proxy_pass      http://194.135.93.147:8080;
        location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
            root           /home/admin/web/diapaint.ru/public_html;
            access_log     /var/log/httpd/domains/diapaint.ru.log combined;
            access_log     /var/log/httpd/domains/diapaint.ru.bytes bytes;
            expires        max;
            try_files      $uri @fallback;
        }
    }
    location /error/ {
        alias   /home/admin/web/diapaint.ru/document_errors/;
    }
    location @fallback {
        proxy_pass      http://194.135.93.147:8080;
    }
    location ~ /\.ht    {return 404;}
    location ~ /\.svn/  {return 404;}
    location ~ /\.git/  {return 404;}
    location ~ /\.hg/   {return 404;}
    location ~ /\.bzr/  {return 404;}
    include /home/admin/conf/web/nginx.diapaint.ru.conf*;
}

Расскажите что вам интересно донастроить и какую цель преследуете.

Чтоб быстро работало... Я вот вижу что там какой-то redis и apc то есть кеширование сессий например, у меня не сделано... Меня сбило с толку что в стате Баженова было то, что у меня нет, я потом я увидел подключение дополнительного конфига и там все есть...

Ладно, почитаю эту тему...

А то уж больно все медленно на ihor.ru работало, 2000 мс страница...

Так. Перечитал внимательно всю тему, посмотрел на свой сервер...

OPCache есть и включен.

APCu есть, включен, но в конфиге был file поменял на apc

А фот redis отсутствует на сервере вроде как. ВОПРОС - если я его поставлю найденным в интернете способом, я не угроблю сам сервер? А то я его два дня запускал блин..

https://gist.github.com/nghuuphuoc/7801123- вот собственно нашел установку редиса этого...

И вот еще, странность какая-то или симптом... Проверяю "ответом севера" вот эту страницу:

http://www.stencil-library.ru/trafarety-dlya-dekora/

Заметил что после паузы 30 секунд и более первая проверка - всегда 2000 мс, последующие если без паузы все идут 300-400 мс... Что это может значить?

Или вот еще мануал...

http://www.itkitchen.net/centos-6-x-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-redisphpredisadmin/

А то я поставил вот так:

yum install --enablerepo=remi php-redis

В пхпинфо он появился, а если сказать service rerdis start - то говорят нет такого сервиса...

Или вот еще мануал...

http://www.itkitchen.net/centos-6-x-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-redisphpredisadmin/

А то я поставил вот так:

yum install --enablerepo=remi php-redis

В пхпинфо он появился, а если сказать service rerdis start - то говорят нет такого сервиса...

Имя может быть как redis, так и redis-server.

"каждый виртуальный хост (/etc/nginx/conf.d/*.conf)" если можно... Виртуальный хост - это что? Это айпи адрес? Или отдельная папка домена? У меня тут:

194.135.93.147.conf​ - мой айпи

default.conf

example_ssl.conf​ - не пользуюсь ССЛ

status.conf​ - фиг знает что это

vesta.conf - это панель как я понял.

Виртуальный хост — сущность веб-сервера, позволяющая задавать различные правила работы для разных доменных имён. Протокол HTTP при составлении запроса может передать заголовок Host, по которому веб-сервер может принять решение о каком-либо действии. Может совпадать IP и порт, однако хостов может быть несколько. В вашем случае:

194.135.93.147.conf​ – без заголовка Host, слушает IP-адрес.

default.conf — все запросы по умолчанию.

example_ssl.conf​ — шаблонный файл, можно удалить.

status.conf​ — пришлите содержимое.

vesta.conf — конфигурация VestaCP, не изменять и не трогать.

Так. Перечитал внимательно всю тему, посмотрел на свой сервер...

OPCache есть и включен.

APCu есть, включен, но в конфиге был file поменял на apc

А фот redis отсутствует на сервере вроде как. ВОПРОС - если я его поставлю найденным в интернете способом, я не угроблю сам сервер? А то я его два дня запускал блин..

https://gist.github.com/nghuuphuoc/7801123- вот собственно нашел установку редиса этого...

Для чего вы планируете использовать Redis? Особого смысла его настраивать для малонагруженных проектов нет.

И вот еще, странность какая-то или симптом... Проверяю "ответом севера" вот эту страницу:

http://www.stencil-library.ru/trafarety-dlya-dekora/

Заметил что после паузы 30 секунд и более первая проверка - всегда 2000 мс, последующие если без паузы все идут 300-400 мс... Что это может значить?

TCP-соединение может устанавливаться долго, а следующие 30 секунд, вероятно, живёт keepalive-соединение.

ЗАЧЕМ РЕДИС - мне саппорт рекомендовал "редис для секций"...

РЕДИС-СЕРВЕР - установиться не смог, что-то вроде писал что нет установочного пакета... Это я с форума ВестаСП взял, первая строчка редис установила, вторая где сервис - не смогла.

СТАТУС.КОНФ

server {
    listen       127.0.0.1:8084 default;
    server_name  _;
    server_name_in_redirect  off;
    location / {
        stub_status on;
        access_log   off;
   }
}

УСТАНОВКА СОЕДИНЕНИЯ.

Проверил, пинг-админом страницу www.stencil-library.ru/dostavka-trafaretov/ то есть где товаров нет.

В среднем: DNS = 0.001, соединение = 0.03 сек, а вот ожидание ответа = 1.2

На странице с товарами все то же, но последнее до 1.8.

Непохоже ведь на соединение?

Короче стопудово дело в базе данных. На первом сайте каталог 3000 товаров, а на втором (http://www.diapaint.ru/almaznaya-vyshivka/) их не больше 200. Второй летает, ответ порядка 0.3 сек - а первый ползает. Хотя вчера настраивал MySQL по рекомендациям доктор-интернета и какого-то перловского скрипта запускаемого на сервере...

ЗАЧЕМ РЕДИС - мне саппорт рекомендовал "редис для секций"...

РЕДИС-СЕРВЕР - установиться не смог, что-то вроде писал что нет установочного пакета... Это я с форума ВестаСП взял, первая строчка редис установила, вторая где сервис - не смогла.

СТАТУС.КОНФ

server {
    listen       127.0.0.1:8084 default;
    server_name  _;
    server_name_in_redirect  off;
    location / {
        stub_status on;
        access_log   off;
   }
}

УСТАНОВКА СОЕДИНЕНИЯ.

Проверил, пинг-админом страницу www.stencil-library.ru/dostavka-trafaretov/ то есть где товаров нет.

В среднем: DNS = 0.001, соединение = 0.03 сек, а вот ожидание ответа = 1.2

На странице с товарами все то же, но последнее до 1.8.

Непохоже ведь на соединение?

Да, ожидание явно исключает долгое установление TCP-сессии. Для более детального анализа предлагаю спрофилировать магазин с помощью XHProf. Redis можно использовать, но профит от его использования будет только на высоконагруженных и распределённых системах.

Короче стопудово дело в базе данных. На первом сайте каталог 3000 товаров, а на втором (http://www.diapaint.ru/almaznaya-vyshivka/) их не больше 200. Второй летает, ответ порядка 0.3 сек - а первый ползает. Хотя вчера настраивал MySQL по рекомендациям доктор-интернета и какого-то перловского скрипта запускаемого на сервере...

Без отчёта профилировщика сложно утверждать, что виной всему база данных.

Подскажите, плиз. Наконец-то я умудрился поставить Redis на один из своих VPS. Судя по redis-cli >keys * он работает, так как там порядка 200 строчек вываливает , типа идентификаторы сессий. Однако остались два вопроса:

1. Провайдер не дает сменить vm.overcommit_memory = 1 и оно у меня 0. Соответственно в логе WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. но ошибок в логе нет. Однако вот эта строчка меня озадачивает: RDB: 0 MB of memory used by copy-on-write как я понимаю, это значит что что-то не пишется в память и это плохо. Памяти у меня лишней есть порядка 1 гига. Но я не нашел поиском подобных страдальцев как я, у всех это RDB больше 0, в основном наоборот ругаются и как ОГРАНИЧИТЬ это я нашел, а вот почему 0 и как сделать и надо ли делать не 0 я не нашел. Подскажите плиз.

2. Ткните пальцем где написано как подружить 2 движка на одном хостинге есть в качестве кеша PHP используется OPCache, надо в config.local.php ДОБАВИТЬ переменную saas_uid ? В каком формате и какое допустимое значение? Ясно, что для каждого сайта свое - но допустимо какое?

Заранее спасибо.

Подскажите, плиз. Столкнулся с неприятной особенностью после перезда на новый сервер. Установил и включил OPCache, он работает и существенно все ускорил. Однако если я меняю в админке блоки (причем в некотороых - на содержимое это не распространяется), то они на сайте не меняются, приходится рестартовать апач. Все было бы ничего, еслибы речь касалась только изменения дизайна.

Но вот я добавляю новую тему в БЛОГ (ну у меня типа НОВОСТИ) а в новостном блоке слева на этой странице http://www.stencil-library.ru/trafarety-dlya-dekora/новый топик блога не появляется до тех пор, пока не рестартану апач...

ЧЯДНТ? Или так и должно быть?

Небольшая поправка: я прикрутил OPcache GUI , и там есть команда сбросить кэш. Судя по тому же OPcache GUI , сброс работает - данные о памяти и файлах обнуляются. НО! При этом блок, о котором я говорил выше, не обновляется...

Где еще может быть это закешировано?

Конфиг у меня: Apache + NGINX + OPCache + Redis

UPD: продолжаю наблюдение.

Итак, обнаружилось что у меня еще не работает "редактировать дизайн" и "редактировать содержимое" панельки. Грешил на модуль или ошибку верстки, как советовали в соответствующей теме. Однако попробовал на втором сайте, который не менялся уже пару лет - тоже самое. Сделал вывод - виноват сервер.

Рестартанул Апач - панельки заработали. Вопрос встал еще острее - что может так кешировать что-то, что проявляется это как описано?

Может ли это делать Redis?

Может ли это быть из-за session.cookie_lifetime которое у меня было = 2 недели, сейчас переставил обратно = 0 (кстати так и не понял, на жизнь корзины это не влияет вроде..)

UPD2: запустил redis-cli >keys * а там нет числа сессиям, уже больше 10 000шт и все прет и прет и прет... Это нормальн вообще?

В логе Редиса постоянный повтор таких строчек:

1218:M 18 Oct 11:57:13.013 * 10 changes in 300 seconds. Saving...
1218:M 18 Oct 11:57:13.015 * Background saving started by pid 20370
20370:C 18 Oct 11:57:13.727 * DB saved on disk
20370:C 18 Oct 11:57:13.729 * RDB: 0 MB of memory used by copy-on-write
1218:M 18 Oct 11:57:13.817 * Background saving terminated with success

То есть каждые 5 минут этот редис что-то сохраняет...

UPD3: заметил в логе Редиса The TCP backlog setting of 511 cannot be enforced... и так далее. Добавил настойку sysctl -w net.core.somaxconn=65535 в rc.local , перезапустил редис - предупреждение пропало.

Теперь блок новостей и добавление записи работает как надо. пока, по крайней мере.

Короче что-то я запутался... Плиз, если есть еще кто живой (а похоже что нет уже), то проясните.

Получается что у меня запушено и работает ЧЕТЫРЕ кеша

1. apc (apcu?) виден в phpinfo, выделено ему 512 Мб, согласно apc.php использует только 8 Мб, настройки его нашел, в них нет значения apc.stat = 1 которое вроде должно быть если ведутся изменения в файлах и не должно быть на настроенном движке. Не очень понимаю, что оно кеширует - но эта настройка рекомендована производителем ($config['cache_backend'] = 'apc';)

Судя по статистике - работает, кеширование 500+ файлов, 100% хитов.

ПОПРАВКА - я рестартовал апач менее часа назад, сейчас потребление растет, но не быстро. Уже порядка 1000 файлов и 20 Мб. Но до 512 явно не дорастет...

2. OPCache он тоже виден в phpinfo, по его статистике тоже работает, ему выделено 128Мб, используется 75 Мб, 99.999% хитов, 1000+ файлов в кеше. Как я понимаю, он хранит скомпилированные php-файлы. В чем отличия от №1, я не пойму.

3. Redis его нигде не видно, но в консоли он отзывается, показывает статистику, в его логе осталось только одно предупреждение WARNING overcommit_memory is set to 0! которое я не могу побороть так как это в ведении хостинга и мне не дотянуться. 10 000+ записей (сессий, как я понимаю) БД на диске 50 Мб, не знаю хорошо это или нет, по его же инфо он занимает около 42 Мб памяти. Как я понял там только сессии, причем они хранятся (вечно) не зависимо от перезагрузки так как каждые 5 минут (300 сек) сохраняются на диск. Тоже не знаю хорошо это или плохо.

4. Nginx как я понял у меня кеширует только статический контент. Как посмотреть его статистику я не знаю, но в панели на хостинге VestaCP есть графики Апача и Nginx и вроде по ним он пашет - так как макс 6 соединений Апача и при этом макс 70 для Nginx как я понимаю, что это означает что он работает.

Вот подозреваю я, что мое непонимание связи п.1 и п.2 и генерит в моей голове множество вопросов, ответы на которые должны быть очевидными. И что-то не то в связке 1 и 2 приводит к тем самым непонятным глюкам, что я наблюдаю... Плиз хелп!

Кажется, вы запутались в понимании того, что, чем и для чего кешируется.

Кеширование байт-кода

Несколько лет назад сторонними вендорами предлагались различные акселераторы (APC, eAccelerator, XCache и пр.) для увеличения производительности. Основное их назначение в интерпретируемых ЯП — кеширование байт-кода сценариев, что и даёт т.н. прирост в скорости. В конкурентной борьбе акселераторов выиграл ZendOpcache, он был включен в состав ядра проекта PHP начиная с версии 5.5. В связи с чем остальные проекты либо на поддержке, либо перестали существовать вовсе.

Исключительной особенностью APC было то, что помимо акселератора в проекте было включено in-memory хранилище ключ-значение. Поскольку ZendOpcache предоставляет возможности только кеширования опкода, то команда выпустила APCu исключительно для хранения структур данных в памяти. APCu не имеет никакого отношения к кешированию опкода.

Кеширование CS-Cart

В CS-Cart предусмотрен механизм кеширования данных, он поддерживает несколько бэкэндов для хранения уже отрендеренных значений: APCu (напоминаю, хранилище ключ-значение в памяти), Redis, Database (MySQL, MariaDB, PerconaDB, ...), SQLite и File (файловое). Традиционно по умолчанию в CS-Cart используется файловое хранилище для внутреннего кеша CS-Cart.

В первую очередь это обусловлено тем, что это наиболее доступный и простой метод. Разные бэкэнды кеширования существуют для того, чтобы иметь возможность выбирать место, где хранить «разогретые» данные. Однако не все данные хранятся там, где их указать. Известно, что Smarty (на основе этого шаблонизатора строится описание представления в CS-Cart), не умеет хранить кеш нигде, кроме как на диске. Это стоит учитывать при ведении проекта и его масштабировании.

Кеширование на клиенте

Этот тип кеширования подразумевает сохранение статического контента (изображения, стили, скрипты, шрифты и пр.) в браузере пользователя. Веб-сервер или исполняемый сценарий управляет политикой устаревания (иными словами, когда вновь запросить новую версию контента с сервера) с помощью специальных HTTP-заголовков. Никакие промежуточные данные при этом на веб-сервере не сохраняются. Представлять это стоит как некую мета-информацию, которую веб-сервер или приложение сообщает клиенту при получении ресурса. Например, «запомни эту картинку на 30 дней», «запомни эту картинку до 1 января», «загрузи картинку, как только она изменится» и пр.

Кеширование на сервере

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

Однако данный подход пока не сильно распространён среди разработчиков и пользователей CS-Cart, поскольку несёт в себе ряд архитектурных трудностей с инвалидацией такого кеша. Одним из примеров может служить ошибка при отображении корзины одного покупателя другому покупателю со аналогичными параметрами ключа кеша. Есть proof-of-concept реализации кеширования с помощью Varnish, однако команда архитекторов не спешит оказывать поддержку при возникновении трудностей.

Резюмирую: есть несколько принципиально разных механизмов кеширования на прикладном уровне. Упоминая кеширование, стоит чётко разделять одно от другого, поскольку средства их работы разные.

Теперь по вопросам:

1. apc (apcu?) виден в phpinfo, выделено ему 512 Мб, согласно apc.php использует только 8 Мб, настройки его нашел, в них нет значения apc.stat = 1 которое вроде должно быть если ведутся изменения в файлах и не должно быть на настроенном движке. Не очень понимаю, что оно кеширует - но эта настройка рекомендована производителем ($config['cache_backend'] = 'apc';)

Не нужно использовать APC, всю его работу выполняет ZendOpcache. APCu может быть использован в качестве хранилища для внутреннего кеша CS-Cart.

2. OPCache он тоже виден в phpinfo, по его статистике тоже работает, ему выделено 128Мб, используется 75 Мб, 99.999% хитов, 1000+ файлов в кеше. Как я понимаю, он хранит скомпилированные php-файлы. В чем отличия от №1, я не пойму.

Отличия перечислены выше.

3. Redis его нигде не видно, но в консоли он отзывается, показывает статистику, в его логе осталось только одно предупреждение WARNING overcommit_memory is set to 0! которое я не могу побороть так как это в ведении хостинга и мне не дотянуться. 10 000+ записей (сессий, как я понимаю) БД на диске 50 Мб, не знаю хорошо это или нет, по его же инфо он занимает около 42 Мб памяти. Как я понял там только сессии, причем они хранятся (вечно) не зависимо от перезагрузки так как каждые 5 минут (300 сек) сохраняются на диск. Тоже не знаю хорошо это или плохо.

Redis прост как палка: он хранит данные в памяти и ещё умеет сбрасывать их на диск с определённой периодичностью и при появлении N ключей в памяти. Лучше всего подбирать значения так, чтобы сохранить компромисс между производительностью (не сохранять очень часто) и консистентностью (не потерять данные при случайном падении инстанса).

vm.overcommit_memory=1 позволяет использовать shared memory при сохранении памяти процессом Redis. Не буду вдаваться в подробности работы Redis. Для осознания важности этого параметра просто представьте, что при наличии в памяти 2 Гб данных при общей доступности в 3 Гб, с vm.overcommit_memory=0 сохранение данных на диск завершится с ошибкой. Т.е. фактически, не хватит места для размещения страничек в памяти.

4. Nginx как я понял у меня кеширует только статический контент. Как посмотреть его статистику я не знаю, но в панели на хостинге VestaCP есть графики Апача и Nginx и вроде по ним он пашет - так как макс 6 соединений Апача и при этом макс 70 для Nginx как я понимаю, что это означает что он работает.

В NGINX есть stub-status, ровно как и в Apache есть mod_status. Они призваны показывать статистику соединений и их состояний, статистику по кешированию вы там не найдёте. Подробная статистика по посещениям есть в access.log.

Спасибо за толь развернутый ответ, ситуация прояснилсь, но вопросы остались по двум пунктам:

1. APC/OPCache

Не нужно использовать APC, всю его работу выполняет ZendOpcache. APCu может быть использован в качестве хранилища для внутреннего кеша CS-Cart.

Блин, но ведь в ДОКУМЕНТАЦИИ к движку ПРЯМО СКАЗАНО "используйте APC"... Так использовать или НЕ использовать? Если не использовать - то что отрубить его вообще в настройках PHP? А что делать с этим:

['cache_backend'] = 'apc'; - там же нет варианта "использовать OPCache?

​У меня похоже именно с этим проблемы, что два кеша для одного и того же используется... Или нет?

2. Redis.

​а. То что у меня там 10 000+ сессий это нормально?

​б. То что на диске 50 Мб база это тоже нормально?

в. Может поставить сохранение не раз в 5 минут а раз в 60 минут? Ибо ничего ценного там же нет, ну потеряется корзина у кого-то если вдруг упадет сервер... Или нет?

г. vm.overcommit_memory=1 - я не могу установить его =1, это делает использование Редис невозможным, неэффективным или можно пользоваться? Учитывая что стадильно показывается использование 42 Мб памяти пори памяти сервера 2 Гб...

Вот...

Блин, но ведь в ДОКУМЕНТАЦИИ к движку ПРЯМО СКАЗАНО "используйте APC"... Так использовать или НЕ использовать? Если не использовать - то что отрубить его вообще в настройках PHP? А что делать с этим:

['cache_backend'] = 'apc'; - там же нет варианта "использовать OPCache?

​У меня похоже именно с этим проблемы, что два кеша для одного и того же используется... Или нет?

Ещё раз, APC – это акселератор, APCu – хранилище. Оба отделены друг от друга, сходства между ними как между котом и котлетой. В терминологии CS-Cart, apc – это и есть класс для APCu. Назван он был так ещё в бородатые времена, когда APC ещё был жив. В качестве ускорителя не использовать APC, есть ZendOpcache и он прекрасно выполняет свою работу. Два ускорителя использовать не рекомендуется.

2. Redis.

​а. То что у меня там 10 000+ сессий это нормально?

​б. То что на диске 50 Мб база это тоже нормально?

Чем больше пользователей (в т.ч. посетителей с поисковых систем), тем больше сгенерируется сессий. Размер базы прямо пропорционален количеству визитов. «Нормальный» размер условно нормален, когда примерно совпадает с количеством посещений.

в. Может поставить сохранение не раз в 5 минут а раз в 60 минут? Ибо ничего ценного там же нет, ну потеряется корзина у кого-то если вдруг упадет сервер... Или нет?

Если устраивает, то почему бы и нет. Инструмент настраивается под задачу.

г. vm.overcommit_memory=1 - я не могу установить его =1, это делает использование Редис невозможным, неэффективным или можно пользоваться? Учитывая что стадильно показывается использование 42 Мб памяти пори памяти сервера 2 Гб...

Можно пользоваться. С тем условием, что свободной памяти для Redis должно быть как минимум вдвое больше используемой. В противном случае что-нибудь сломается. Так работает copy-on-write в Redis и с этим нужно жить.

Ура, поти все. Последнее:

В качестве ускорителя не использовать APC, есть ZendOpcache и он прекрасно выполняет свою работу. Два ускорителя использовать не рекомендуется.

Как понять, используется ли APC как акселератор или нет? Не тот АРС который Цс-Карт называет АРС, а тот АРС который на самом деле АРС, и как отключить АРС который АРС чтобы остался действующим APCu который ЦС-Карт называет АРС?

Вот тут моя: http://www.stencil-library.ru/phpinfo.php

И там для АРС написано emulated ...