PrestaShop и ISPManager

Absolute

Крокодил ;)
Регистрация
9 Авг 2009
Сообщения
581
Реакции
456
Добрый день. Стал устанавливать Prestashop на ISPManager Lite 5 (Debian 8, PHP 5.6).

Возникли следующие вопросы:
1. Как в режиме PHP-FPM настроить friendly url (ЧПУ) ??
2. Как задействовать кэш браузера? Google PageSpeed определяет, что кэш браузера не включен, хотя в панели задействовано сжатие и кэш. Статические файлы отдаются без заголовка о времени кэширования.
h_1476891820_4878117_4cd91e074a.png
 
По поводу кеша:
В консоли ввести

sudo a2enmod expires
service apache2 restart
И все заработает.

В ISPManager почему-то выключен модуль Expires, я тоже ковырялся долго, в конфигах nginx прописывал (установлен как прокси для статичных файлов) и ничего не помогало.
Правда время, которое ты ставишь в ISPManager не действует, работает то, котторое прописано престой в htaccess.
Аналогично попробуй с friendly url, включи mod_rewrite.
 
Последнее редактирование:
sudo a2enmod expires
service apache2 restart
И все заработает.

В ISPManager почему-то выключен модуль Expires, я тоже ковырялся долго, в конфигах nginx прописывал (установлен как прокси для статичных файлов) и ничего не помогало.
Супер! Сработало, спасибо. Выходит все же статику не nginx, a apache отдает? Странно как-то...
Аналогично попробуй с friendly url, включи mod_rewrite.
На Apache итак включен... Не работает, если в ISPManager задействовать PHP-FPM, который показывает бОльшую производительность, чем Apache. Для просмотра ссылки Войди или Зарегистрируйся по установке сервера на основе связки nginx + php-fpm, там прописан конфиг nginx для престы и rewrite правила... Но вот как это переделать для ISPManager?
 
Вобщем решил проблему в режиме PHP-FPM так: передрал часть конфига Для просмотра ссылки Войди или Зарегистрируйся, верхнюю часть секции server, которая стандартно генерится панелью оставил без изменений, fastcgi_pass раскомментировал и указал в нем путь /var/www/php-fpm/MY-WWW-DOMAIN.sock
В итоге конфиг такой:
Код:
server {
    server_name MYSITE.ru www.MYSITE.ru;
    charset UTF-8;
    index index.html index.php;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/MYSITE.ru/*.conf;
    access_log /var/www/httpd-logs/MYSITE.ru.access.log;
    error_log /var/www/httpd-logs/MYSITE.ru.error.log notice;
    ssi on;
    set $root_path /var/www/MY-WWW-DOMAIN/data/www/MYSITE.ru;
    root $root_path;
    listen 999.999.999.999:80; #My IP
    location = /favicon.ico {
        log_not_found off;   
        access_log off;
    }
     location = /robots.txt {
         auth_basic off;
         allow all;
         log_not_found off;
         access_log off;
    }
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_keep_conn on;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@MYSITE.ru";
        fastcgi_pass unix:/var/www/php-fpm/MY-WWW-DOMAIN.sock;
        #fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
    rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
    rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    try_files $uri $uri/ /index.php?$args;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_types application/json text/css application/javascript;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.0;
    expires 30m;
}
Не претендую на оптимальность, но по крайней мере всё работает. Если кто вдруг будет использовать, - правится конфиг под рутом (Домены =>WWW-домены => Конфиг) прямо в панели, не забудьте про данные в путях (www-domain, my-site) и IP.
 
Наверняка кому-то понадобится. Плагин для ISPManager'а, позволяющий выбрать цмс при создании домена. В итоге в шаблонизатор конфигурационных файлов передастся параметр PARAM_containertype и в зависимости от него можно создавать уже свои конфиги для необходимой CMS
root@d:~# cat /usr/local/mgr5/etc/xml/ispmgr_mod_select.xml
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
<handler name="containertype" type="xml">
<event name="webdomain.edit" after="yes" />
</handler>

<metadata name="webdomain.edit" type="form">
<form>
<page name="features">
<field name="containertype">
<select name="containertype"/>
</field>
</page>
</form>
</metadata>

<lang name="ru">
<messages name="webdomain.edit">
<msg name="containertype">CMS</msg>
<msg name="hint_containertype">Выберите CMS</msg>
<msg name="s">Django</msg>
<msg name="m">Wordpress</msg>
<msg name="l">etc</msg>
</messages>
</lang>
</mgrdata>
root@d:~# cat /usr/local/mgr5/addon/containertype
#!/usr/bin/perl

while (my $line = <STDIN>)
{
$myxml = $myxml . $line;
}
$myxml =~ s/<\/doc>$/<slist name="containertype"><msg>s<\/msg><msg>m<\/msg><msg>l<\/msg><\/slist><containertype>m<\/containertype><\/doc>/;

my $sok = $ENV{'PARAM_sok'};
if ($sok)
{
$myxml =~ s/<slist name="containertype"><msg>s<\/msg><msg>m<\/msg><msg>l<\/msg><\/slist>//;
}
print $myxml;

Ну вот, будет прилетать PARAM_containertype со значениями s,m или l. Подставьте свои значения для удобства.
А в шаблоне уже с помощью if обработайте.
© Дарья Артемьева
Подробности опишу попозже тут Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Вобщем решил проблему в режиме PHP-FPM так: передрал часть конфига Для просмотра ссылки Войди или Зарегистрируйся, верхнюю часть секции server, которая стандартно генерится панелью оставил без изменений, fastcgi_pass раскомментировал и указал в нем путь /var/www/php-fpm/MY-WWW-DOMAIN.sock
В итоге конфиг такой:
Код:
server {
    server_name MYSITE.ru www.MYSITE.ru;
    charset UTF-8;
    index index.html index.php;
    disable_symlinks if_not_owner from=$root_path;
    include /etc/nginx/vhosts-includes/*.conf;
    include /etc/nginx/vhosts-resources/MYSITE.ru/*.conf;
    access_log /var/www/httpd-logs/MYSITE.ru.access.log;
    error_log /var/www/httpd-logs/MYSITE.ru.error.log notice;
    ssi on;
    set $root_path /var/www/MY-WWW-DOMAIN/data/www/MYSITE.ru;
    root $root_path;
    listen 999.999.999.999:80; #My IP
    location = /favicon.ico {
        log_not_found off;  
        access_log off;
    }
     location = /robots.txt {
         auth_basic off;
         allow all;
         log_not_found off;
         access_log off;
    }
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    location ~ \.php$ {
        fastcgi_index index.php;
        fastcgi_keep_conn on;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@MYSITE.ru";
        fastcgi_pass unix:/var/www/php-fpm/MY-WWW-DOMAIN.sock;
        #fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
    rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
    rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
    rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
    rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
    rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
    try_files $uri $uri/ /index.php?$args;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_types application/json text/css application/javascript;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.0;
    expires 30m;
}
Не претендую на оптимальность, но по крайней мере всё работает. Если кто вдруг будет использовать, - правится конфиг под рутом (Домены =>WWW-домены => Конфиг) прямо в панели, не забудьте про данные в путях (www-domain, my-site) и IP.

Скажи параметры сервера скорость полной загрузги страницы и посещалки, чтобы оценить прирост производительности. А так твой пост тянет на официальный мануал на сайте престы!
 
Скажи параметры сервера скорость полной загрузги страницы и посещалки, чтобы оценить прирост производительности. А так твой пост тянет на официальный мануал на сайте престы!
В nginx я не силен. Лишь рассказываю как решил проблему на ISPManager путем простого слияния двух конфигов.
Что касается производительности, то об этом в сети много разных споров - одни выступают за apache с nginx, другие за php-fpm.

Недорогой VDS
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz 2400.084 Mhz X 2
2 Gb RAM
40 Gb SSD
KVM
Debian GNU/Linux 8.6 (jessie)
ISPmanager Lite 5.78.0
Apache 2.4.10-10+deb8u7
MySQL 5.5.52-0+deb8u1
PHP 5.6.26+dfsg-0+deb8u1
nginx 1.10.1

Локация: Москва

Интернет-магазин 2468 товаров, pm-cachemanager
Страница категории - вывод 120 товаров
Тест loadimpact из Дублина (Ирландия)
Разница между графиками лишь в том, что в ISPmanager в настройках WWW-домена переключен режим работы PHP.

Apache
h_1477165931_9477013_cfb1a7c499.png

________________________________________________________________

PHP-FPM
h_1477166056_2733618_77d7307b52.png
 
Последнее редактирование:
Назад
Сверху