vxd Posted December 24, 2013 Share Posted December 24, 2013 Доброго времени суток. Имеется: nginx v1.4.4 + fastcgi, PrestaShop 1.5.6.1 Проблема вот в чём: При подключении функиции кеширования nginx'а fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache:10m inactive=5m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache cache; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_hide_header "Set-Cookie"; fastcgi_ignore_headers "Cache-Control" "Expires"; страницы создаются и кешируются без проблем, но появляется другая проблема - если в магазин залогинился пользователь, то на другом компе (в другом браузере) другой пользователь находится под его аккаунтом. Может кто-нибудь что-нибудь посоветовать или подсказать? Может кто сталкивался с таким чудом? Спасибо. Link to comment Share on other sites More sharing options...
Kerm Posted December 25, 2013 Share Posted December 25, 2013 Не верный конфиг nginx Link to comment Share on other sites More sharing options...
Kerm Posted December 25, 2013 Share Posted December 25, 2013 location ~ \.php$ { fastcgi_pass unix:/var/www/user/data/php-fpm/phpfpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_connect_timeout 12000s; fastcgi_read_timeout 12000s; fastcgi_send_timeout 12000s; fastcgi_buffer_size 64k; fastcgi_buffers 16 64k; fastcgi_cache_valid 200 301 302 1d; fastcgi_cache_valid 304 120d; fastcgi_cache_valid 404 1m; fastcgi_cache_use_stale error timeout invalid_header updating http_500; fastcgi_max_temp_file_size 2M; fastcgi_cache_lock on; fastcgi_cache_lock_timeout 2m; fastcgi_cache_valid 2d; root $root_path; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; if (!-f $request_filename) { rewrite ^(.*)$ /index.php last; } } Вот рабочий конфиг, проверенный временем root $root_path; <-- под переменной указана корневая папка сайта и путь к fastcgi сокету будет у тебя другой. Link to comment Share on other sites More sharing options...
vxd Posted December 25, 2013 Author Share Posted December 25, 2013 Спасибо, конфиг поправил. Только не могу разобраться с fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache:10m inactive=5m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache cache; пользователи получают залогиненную закешированную страницу другого пользователя, а при добавлении fastcgi_hide_header "Set-Cookie"; fastcgi_ignore_headers "Cache-Control" "Expires"; пользователи вообще не могут залогиниться в свой аккаунт. Link to comment Share on other sites More sharing options...
vxd Posted December 26, 2013 Author Share Posted December 26, 2013 Правильно ли я понимаю, что надо определять при помощи nginx зашёл пользователь под своим аккаунтом или нет? Если так, то эту информацию и кук получить нельзя, т.к. кука зашифрована. Как тогда добавить ещё одну куку, которую будет определять nginx? Надо как-то так: map $http_cookie $no_cache { default 0; ~_NOTGUEST 1; # session cookie } Тогда можно определять и соответственно делать кеширование (microcaching). Link to comment Share on other sites More sharing options...
Kerm Posted December 27, 2013 Share Posted December 27, 2013 То что я тебе написал работает 100%, после применения конфига и перезапуска nginx, не мешало бы так же почистить кеш браузера и куки за все время. Link to comment Share on other sites More sharing options...
vxd Posted December 27, 2013 Author Share Posted December 27, 2013 Т.е. эту информацию fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache:10m inactive=5m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache cache; добавлять не надо? Link to comment Share on other sites More sharing options...
Kerm Posted December 27, 2013 Share Posted December 27, 2013 И да и нет, точно сказать не могу, тут можно сделать и настроить все по разному, но вот тот конфиг что я привел, он у меня работает отлично без ошибок которые ты описал на многих сайтах. Ты этими строчками задаешь путь где будет хрониться кеш, задаешь подуровни его хранения, максимальный размер файла и 5 минут хранения его...причем первая строчка должна быть в http секции, а вторые две в location ~ \.php$ {....но проблема у тебя где то в fastcgi_cache_key "$scheme$request_method$host$request_uri"; Попробуй без этих трех строчек вообще.. Link to comment Share on other sites More sharing options...
Kerm Posted December 27, 2013 Share Posted December 27, 2013 (edited) Вот целый конфиг для сайта: ######################site.ru##################### server { server_name www.site.ru; listen 10.20.03.05; rewrite ^ http://site.ru$request_uri?'>http://site.ru$request_uri? permanent; #301 redirect } server { listen 10.20.03.05; server_name site.ru; charset UTF8; disable_symlinks if_not_owner from=$root_path; set $root_path /var/www/user/data/www/site.ru; include kiev.conf; #Тут ЧПУ прописаны # Static location / { root $root_path; index index.php; client_max_body_size 10m; client_body_buffer_size 128k; access_log /var/www/nginx-logs/user isp; access_log /var/www/httpd-logs/site.ru.access.log ; # Rewrite rules if ( !-e $request_filename ) { rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last; break; } } location ~ ^/(status|ping)$ { root $root_path; include fastcgi_params; fastcgi_pass unix:/var/www/user/data/php-fpm/phpfpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; allow 127.0.0.1; deny all; } error_page 404 /404/; location = /404/ { rewrite ^ http://site.ru permanent; } error_page 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; expires 120d; } location ~ \..*/.*\.php$ { return 404; } # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000 location ~ \.php$ { fastcgi_pass unix:/var/www/user/data/php-fpm/phpfpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_connect_timeout 12000s; fastcgi_read_timeout 12000s; fastcgi_send_timeout 12000s; fastcgi_buffer_size 64k; fastcgi_buffers 16 64k; fastcgi_cache_valid 200 301 302 1d; fastcgi_cache_valid 304 120d; fastcgi_cache_valid 404 1m; fastcgi_cache_use_stale error timeout invalid_header updating http_500; fastcgi_max_temp_file_size 2M; fastcgi_cache_lock on; fastcgi_cache_lock_timeout 2m; fastcgi_cache_valid 2d; root $root_path; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; if (!-f $request_filename) { rewrite ^(.*)$ /index.php last; } } # Security (hidden files) location ~ /\. { deny all; access_log off; log_not_found off; } # Stuffs location = /robots.txt { root $root_path; access_log off; log_not_found off; expires 30d; } location = /favicon.ico { root $root_path/img; access_log off; log_not_found off; expires 30d; } location = /sitemap.xml { root $root_path; access_log off; log_not_found off; expires 30d; } # static files location ~* ^.+\.(jpg|jpeg|gif|css|png|js|pdf|html)$ { expires 10d; access_log off; log_not_found off; root $root_path; } location /js/jquery/ { root $root_path; expires 10d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /img/ { root $root_path; expires 14d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /themes/user/user-img/ { root $root_path; expires 120d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /themes/user/img/ { root $root_path; expires 120d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location ~* \.(admin-dev|override|tools|translations|webservice|modules|char|classes|install|config|controllers|docs|export|localization|log|.*sql|.*bz2|.*csv|.*tpl(\.php)?|xtmpl)$|^(\..*|Entries.*)$|\.php_ { deny all; } include /usr/local/ispmgr/etc/nginx.inc; location ~ /\.ht { deny all; } } user - юрер под которым сайт пашет на сервереsite.ru - твой сайтinclude /usr/local/ispmgr/etc/nginx.inc; - в том случае если у тебя ISPmanager есть, если нет то у тебя ошибка конфига будет, закомментируй тогда. /themes/user/user-img/ - тут user поменяй на название темы своей и user-img заменить на имя папки с картинками темы Я не бьюсь об заклад что это идеальный конфиг и совершенством наверное он не обладает и думаю его чуток нужно подправить чтобы была правильная переадресация на страницу 404 престашопа..Но этот конфиг у меня на очень многих сайтах которые давно уже работают и проблем не было! Edited December 27, 2013 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
vxd Posted December 27, 2013 Author Share Posted December 27, 2013 (edited) Ого, спасибо за конфиг, поизучаю. В общем, с твоим конфигом всё работает, у всех всё нормально. Только я не понимаю тогда, где у тебя хранится закешированные данные? На сколько я понимаю, по-умолчанию нет такого параметра. В моём примере параметр fastcgi_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache:10m inactive=5m; указывает на то, что кеш будет хранится в /var/cache/nginx/cache. Кеш-то создаётся, другому пользователю отдаётся закешированный файл, но с информацией и кукой другого пользователя.Конечно, этот параметр сейчас отключен, пока не разберусь. В твоём конфиге этот параметр может указан в include fastcgi_params? Или я чего-то не понимаю. :-) Edited December 27, 2013 by vxd (see edit history) Link to comment Share on other sites More sharing options...
vxd Posted December 27, 2013 Author Share Posted December 27, 2013 Вот тут есть хорошее объяснение с примером конфига, о том, что я имею ввиду https://www.digitalocean.com/community/articles/how-to-setup-fastcgi-caching-with-nginx-on-your-vps Но дело в том, что в престе сессия зашифрована, и информация о ней находится в куке в зашифрованном виде. Поэтому, определить, зашёл ли пользователь и нет (т.е. гость) нет возможности (точнее, я пока не понял как это сделать). Для гостя страницы можно отдавать из кеша (как статичную страницу, созданную nginx'ом), а залогиненным пользователям уже отдавать сгенерированные страницы налету (для них же динамика). Вот я и думаю, как создавать куку, когда клиент залогинился, и удалять её, когда клиент вышел из своего аккаунта. Надеюсь, идея понятна. Link to comment Share on other sites More sharing options...
Kerm Posted December 27, 2013 Share Posted December 27, 2013 Ты слишком заморачиваешься и идешь не тем путем... Link to comment Share on other sites More sharing options...
Kerm Posted December 27, 2013 Share Posted December 27, 2013 Смотри в сторону nginx+php-fpm без использования таких вещей как apc cache, xcache, memcache с отключенными опциями сжатия файлов в престе...и оптимизации SQL запросов на уровне специальных модулей для престы. Link to comment Share on other sites More sharing options...
pifon3257899 Posted April 21, 2016 Share Posted April 21, 2016 Вот целый конфиг для сайта: ######################site.ru##################### server { server_name www.site.ru; listen 10.20.03.05; rewrite ^ http://site.ru$request_uri?'>http://site.ru$request_uri? permanent; #301 redirect } server { listen 10.20.03.05; server_name site.ru; charset UTF8; disable_symlinks if_not_owner from=$root_path; set $root_path /var/www/user/data/www/site.ru; include kiev.conf; #Тут ЧПУ прописаны # Static location / { root $root_path; index index.php; client_max_body_size 10m; client_body_buffer_size 128k; access_log /var/www/nginx-logs/user isp; access_log /var/www/httpd-logs/site.ru.access.log ; # Rewrite rules if ( !-e $request_filename ) { rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last; break; } } location ~ ^/(status|ping)$ { root $root_path; include fastcgi_params; fastcgi_pass unix:/var/www/user/data/php-fpm/phpfpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; allow 127.0.0.1; deny all; } error_page 404 /404/; location = /404/ { rewrite ^ http://site.ru permanent; } error_page 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; expires 120d; } location ~ \..*/.*\.php$ { return 404; } # PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000 location ~ \.php$ { fastcgi_pass unix:/var/www/user/data/php-fpm/phpfpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_connect_timeout 12000s; fastcgi_read_timeout 12000s; fastcgi_send_timeout 12000s; fastcgi_buffer_size 64k; fastcgi_buffers 16 64k; fastcgi_cache_valid 200 301 302 1d; fastcgi_cache_valid 304 120d; fastcgi_cache_valid 404 1m; fastcgi_cache_use_stale error timeout invalid_header updating http_500; fastcgi_max_temp_file_size 2M; fastcgi_cache_lock on; fastcgi_cache_lock_timeout 2m; fastcgi_cache_valid 2d; root $root_path; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; if (!-f $request_filename) { rewrite ^(.*)$ /index.php last; } } # Security (hidden files) location ~ /\. { deny all; access_log off; log_not_found off; } # Stuffs location = /robots.txt { root $root_path; access_log off; log_not_found off; expires 30d; } location = /favicon.ico { root $root_path/img; access_log off; log_not_found off; expires 30d; } location = /sitemap.xml { root $root_path; access_log off; log_not_found off; expires 30d; } # static files location ~* ^.+\.(jpg|jpeg|gif|css|png|js|pdf|html)$ { expires 10d; access_log off; log_not_found off; root $root_path; } location /js/jquery/ { root $root_path; expires 10d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /img/ { root $root_path; expires 14d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /themes/user/user-img/ { root $root_path; expires 120d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location /themes/user/img/ { root $root_path; expires 120d; access_log off; add_header Content-Type image/jpeg; add_header Cache-Control public; } location ~* \.(admin-dev|override|tools|translations|webservice|modules|char|classes|install|config|controllers|docs|export|localization|log|.*sql|.*bz2|.*csv|.*tpl(\.php)?|xtmpl)$|^(\..*|Entries.*)$|\.php_ { deny all; } include /usr/local/ispmgr/etc/nginx.inc; location ~ /\.ht { deny all; } } user - юрер под которым сайт пашет на сервере site.ru - твой сайт include /usr/local/ispmgr/etc/nginx.inc; - в том случае если у тебя ISPmanager есть, если нет то у тебя ошибка конфига будет, закомментируй тогда. /themes/user/user-img/ - тут user поменяй на название темы своей и user-img заменить на имя папки с картинками темы Я не бьюсь об заклад что это идеальный конфиг и совершенством наверное он не обладает и думаю его чуток нужно подправить чтобы была правильная переадресация на страницу 404 престашопа.. Но этот конфиг у меня на очень многих сайтах которые давно уже работают и проблем не было! А ничего так, что в этом конфиге fastcgi кэш вообще не включен? Должно вклюаться следующей инструкцией: fastcgi_cache cache_name; где cache_name - это имя инструкции кэширования в http{ } А в приведенном выше конфиге вообще кэш не включается, и все fastcgi_cache_valid игнорируются, поэтому все нормально и работает))) 1 Link to comment Share on other sites More sharing options...
Kerm Posted April 22, 2016 Share Posted April 22, 2016 Интересно. Вы конечно совершенно правы, я не стал прописывать это, статика там кешируется и этого вполне достаточно, а чтоб кешировать еще и fastcgi я тогда не нашел информацию о том что нужно указывать в параметре "fastcgi_cache_key" для престашоп, чтобы сайт работал стабильно после этого и не кешировал, то что не нужно, а именно чтобы не было проблем с куки и сессиями после. Link to comment Share on other sites More sharing options...
pifon3257899 Posted April 22, 2016 Share Posted April 22, 2016 Интересно. Вы конечно совершенно правы, я не стал прописывать это, статика там кешируется и этого вполне достаточно, а чтоб кешировать еще и fastcgi я тогда не нашел информацию о том что нужно указывать в параметре "fastcgi_cache_key" для престашоп, чтобы сайт работал стабильно после этого и не кешировал, то что не нужно, а именно чтобы не было проблем с куки и сессиями после. Беда в том, что в престе кеширование fastcgi практически нереально настроить. Если вход в админку и вообще саму админку можно не кэшировать благодаря отдельным инструкциям в nginx, то блок с корзиной, например, который сквозной через весь сайт и везде всегда для всех уникальный, нельзя закрыть от кэширования. Если весь фронтэнд закэшировать через nginx, то мы даже добавить товары в корзину не сможем (точнее сможем, в базу запишется все, но мы будем видеть всегда пустую корзину). Была идея подключить SSI, но придется сильно переписать шаблоны, так как они все по умолчанию на шаблонизаторах .tpl работают. Поэтому я пока отложил эту идею кэширования на fastcgi. Link to comment Share on other sites More sharing options...
[email protected] Posted August 1, 2016 Share Posted August 1, 2016 Добрый день! Задам вопрос не прям в тему, а рядом, чтобы не создавать новую ветку. Сейчас магазин работает на связке Apache + MariaDB 10.1 + Memcashed. В данный момент меня не устраивает время ответа сервера, хотя куплен хороший VPS (2*Xeon 2,4Ghz/2Gb/60 Gb SSD) В какую сторону смотреть в целях повышения скорости отклика web-сервера? 1) Полный переход на Ngnix + Fast CG 2) Отдача статики Ngnix'ом + Apache для динамики. Какой выигрыш будет в том и в другом случае и стоит ли морочиться? Заранее огромное спасибо! Link to comment Share on other sites More sharing options...
pifon3257899 Posted August 1, 2016 Share Posted August 1, 2016 Как показывает практика, если все отдать nginx, то работает быстрее. Но больше всего ресурс жрёт php на престе. И кэш fastcgi отличное решение, но его очень непросто реализовать на этом движке. Если товаров больше 1000, время ответа становится все более заметным. Пробовали даже php7 fpm + nginx + percona на сервере с параметрами как у Вас, все равно ответ 1-2 сек на сайте с 12000 товаров. в общем, это я к тому, что преста для обьемных магазов слишком прожерливая, и мы пока не смогли найти решение сильно снизить нагрузку... Link to comment Share on other sites More sharing options...
[email protected] Posted August 1, 2016 Share Posted August 1, 2016 О как! У меня оч много товаров, более 20000 тысяч. Сейчас время ответа сервера 3-4 секунды. Цель сделать 1-2 секунды хотя бы. Больше всего времени занимает контроллер initContent судя по профилированию. И видно что дело именно в работе web-сервера, потому что запросы к базе кешируются в самом движке MySQL и с помощью memcached. На сколько дает прирост Ngnix + Fast CGI по вашему опыту? Будет ли хотя бы 40-50% сокращения отклика? Есть конечно второй путь, наращивать железо, но это крайний случай уже. Link to comment Share on other sites More sharing options...
pifon3257899 Posted August 1, 2016 Share Posted August 1, 2016 В связке не работал. Но чистый апач у нас вышел где-то в 3 раза медленнее, чем чистый nginx. 1-2 сек не очень хорошо, как вы на 3-4 работаете?)) 7 пхп почти в 4 раза нас ускорила. Плюс чистый сервер, на котором один сайт толькл был, даже пхпмайадмин снесли от греха подальше. Link to comment Share on other sites More sharing options...
[email protected] Posted August 1, 2016 Share Posted August 1, 2016 Тяжело работаем! =( 1. Чистый сервер -- да скоро будет 2. Рекомендуете попробовать перейти на PHP7 вместо 5.4.16 ? Стоит ли пробывать Apache + PHP7 3. Как настраивали Ngnix, по инструкции ( http://prestashop24.ru/2015/09/16/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8-nginx-%D0%B8-php-fpm-%D0%B4%D0%BB%D1%8F-prestashop-1-6-x/ ) ? Поделитесь опытом, что работает, что нет, и как не изобретать велосипед. Заранее спасибо огромное! Link to comment Share on other sites More sharing options...
pifon3257899 Posted August 1, 2016 Share Posted August 1, 2016 Вообще, в принципе, я не вижу ни одной причины, по которой стоит пользоваться Apache вместо nginx)))) Php7 намного быстрее 5, тем более старой 5.4 Link to comment Share on other sites More sharing options...
[email protected] Posted August 2, 2016 Share Posted August 2, 2016 Доброе утро! >Вообще, в принципе, я не вижу ни одной причины, по которой стоит пользоваться Apache вместо nginx)))) Касательно престы плюсы Апача только в работе из коробки, все модули вносят то что им надо в .htaccess 3. Как настраивали Ngnix, по инструкции ( http://prestashop24....estashop-1-6-x/ ) ? Установлен ли у вас Advansed Search4 ? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now