Jump to content

Проблемы с кэшем (nginx)


Recommended Posts

Суть проблемы: при авторизации на странице authentication.php?back=my-account.php после ввода логин/пароль и нажатии кнопки Вход, страница обновляется, но опять появляется форма авторизации с пустыми полями, причем авторизация произошла, если обновить страницу еще раз, то она исчезнет и появится блок Мой аккаунт.

Тоже самое с выходом, нажимаю Выйти, страница обновляется, но блок Мой аккаунт не исчезает. Исчезает только после еще одного обновления страницы.

Не работает в Firefox 5, Chrome 13 и IE8, в Опере 11.50 работает через раз, но тоже не всегда. Например, если я нажимаю выход на индексе /?mylogout то страница обновляется и все, ничего не происходит, такое ощущение что браузер вообще не отправляет запрос, а берет из кэша, а если выхожу со страницы аккаунта /my-account.php то выходит, при этом переходя на индекс. После выхода опять нажимаю Войти, перехожу на /my-account.php и вижу странцу аккаунта, как будто я уже вошел. ерунда какая-то

PS 1.4.4

Apache+nginx

В настройках производительности в разделе Smarty Перекомпиляция стоит включенной, а Кеширование отключено (при включенном тоже самое).

Link to comment
Share on other sites

Если на сервере установлен memcache то в php.ini должен быть изменен параметр сохранения сессий с того что идет там по умолчанию на memcache сесии (более подробное инфо в google). Так же и в престе memcache должен быть включен. Может еще у вас nginx не правильно настроен и он выдает один и тот же ответ из кэша. Можно еще поробовать переустановить, обновить до последней верси, почистить кэш на FTP.

Link to comment
Share on other sites

nginx.txt

Если на сервере установлен memcache то в php.ini должен быть изменен параметр сохранения сессий с того что идет там по умолчанию на memcache сесии (более подробное инфо в google). Так же и в престе memcache должен быть включен. Может еще у вас nginx не правильно настроен и он выдает один и тот же ответ из кэша. Можно еще поробовать переустановить, обновить до последней верси, почистить кэш на FTP.

Да, у меня стоит memcached, действительно в php не были установлены нужные параметры, я установил:

session.save_handler=memcache
session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_$

Остальные параметры memcache:

memcache.allow_failover		1
memcache.chunk_size		8192
memcache.compress_threshold	20000
memcache.default_port		11211
memcache.hash_function		crc32
memcache.hash_strategy		consistent
memcache.lock_timeout		15
memcache.max_failover_attempts	20
memcache.protocol		ascii
memcache.redundancy		1
memcache.session_redundancy	2

Почистил папки /smarty/compile/ и /smarty/cache

Эффекта нет!

Но что странно, заметил в Firebug'е ответ 302 Found на запрос /my-account.php да и просто domain.ru/ когда делаю /?mylogout т.е. кто-то (nginx?) отправляет браузеру ответ о редиректе данного адреса куда-то там, т.е. apache действительно не получает запроса. Это странно, потому что у меня никаких редиректов в настройках nginx нет, вот его настройки:

nginx.txt

server.txt

Link to comment
Share on other sites

Мне кажется что дело в nginx.

Да кстате в memcache в session safe patch у меня другое значение стоит...

Да, действительно, дело в nginx'е, отключил его сейчас и обращаюсь напрямую к апачу, проблем нет.

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

Буду разбираться с nginx'ом

Link to comment
Share on other sites

дык, у тебя при обращении к странице товара - 404

в логах апача что?

отруби ЧПУ и попробуй нжинкс+апач+мемкеш - т.е. все по дефолту - уверен будет рабоать.

П.С. у тебя в хетзне - вдс или впс? Можешь параметры сказать и загрузку по top? Тоже может на них перелезу

Link to comment
Share on other sites

дык, у тебя при обращении к странице товара - 404

в логах апача что?

отруби ЧПУ и попробуй нжинкс+апач+мемкеш - т.е. все по дефолту - уверен будет рабоать.

Да нет, ты, видимо, попал на сайт, когда я вчера уже дурью маялся с ЧПУ, я потом отключил его, а проблема с 302 редиректом осталась

В аксесс логе апача:

XXX.236.255.226 - - [14/Aug/2011:12:24:47 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:24:48 +0800] "GET / HTTP/1.0" 200 6494
XXX.236.255.226 - - [14/Aug/2011:12:24:54 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:24:56 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:26:30 +0800] "GET /authentication.php?back=my-account.php HTTP/1.0" 200 4555
XXX.236.255.226 - - [14/Aug/2011:12:27:02 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:27:16 +0800] "POST /authentication.php HTTP/1.0" 302 26
XXX.236.255.226 - - [14/Aug/2011:12:27:17 +0800] "GET /my-account.php HTTP/1.0" 200 4460
XXX.236.255.226 - - [14/Aug/2011:12:27:19 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:27:25 +0800] "GET /?mylogout HTTP/1.0" 302 26
XXX.236.255.226 - - [14/Aug/2011:12:27:26 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:27:27 +0800] "GET /cart.php?_=...
XXX.236.255.226 - - [14/Aug/2011:12:27:29 +0800] "GET /my-account.php HTTP/1.0" 302 26
XXX.236.255.226 - - [14/Aug/2011:12:27:30 +0800] "GET /authentication.php?back=my-account.php HTTP/1.0" 200 4555
XXX.236.255.226 - - [14/Aug/2011:12:27:40 +0800] "GET /cart.php?_=...
XXX.249.71.240 - - [14/Aug/2011:12:27:52 +0800] "GET /category.php?id_category=17 HTTP/1.0" 200 4091

В еррор логе ничего особенного нет.

POST /authentication.php HTTP/1.0" 302 26 означает что запрос все-таки пришел апачу, но почему тогда редирект? Может преста делает таким образом возврат на нужную страницу, а не

header("Location: index.php")

 

П.С. у тебя в хетзне - вдс или впс? Можешь параметры сказать и загрузку по top? Тоже может на них перелезу

VPS и VDS одно и тоже;) Если ты имел в виду дедик, то у меня виртуал. Взял тоже для пробы на хетцнере самый дешевый. За 300р/мес. это просто чудо! RAM 512Mb, HDD 20Gb, процессор (если верить /proc/cpuinfo) 2806.754МГц.

Нагрузка в топе единицы %, я на этом серваке сейчас поднимаю только этот магазин да еще несколько сайтов-визиток висит, поэтому нагрузки пока нет.

Link to comment
Share on other sites

да имел ввиду впс/дедик, спасибо за инфо.

 

я не спец по настройке нжинкса, привожу свой конфиг (сборная солянка из разных манов), может поможет

 


server {
listen 80;
server_name blablabla;
access_log /var/log/nginx/blablabla.log;
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
       root /var/www/blablabla/;
       index index.html index.php;
       access_log on;
       #expires 1d;
       rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg last;
       rewrite ^/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg last;
       rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg last;
       allow all;
}

location ~ /\.ht {
          deny all;
          }

location / {
proxy_pass http://127.0.0.1:88/;
       }
}

 

 

у тебя в локейшн странный синтаксис, или это из терминала так скопировалось?

 location .......|b$

 

 

 

 

Link to comment
Share on other sites

Nginx смотри...да и ты в ручную в .htaccess прописывал чего?

Да нет, у меня .htaccess вообще нет, какой в нем смысл в связке с nginx'ом?

SergeyH, ну у нас конфиги принципиально не отличаются, реврайты только, ну это для картинок в режиме ЧПУ. Удивило только проксирование на апач, в принципе работать конечно будет, но некоторую информацию передавать не будет, в частности реальные IP клиентов. Да, это из терминала так скопировалось.

Че-то я уже в панике, еще раз сейчас перешел на апач, все работает. Перерыл еще раз все мануалы по скрещиванию престы и nginx'а ничего нового не нашел. Уже начал склоняться с локальной причине. Посмотрите пожалуйста у себя, раз уже все равно засветил домен)) anybrands.ru логин: [email protected] пароль: 12345

Если есть firebug, смотрите с ним, интересуте момент логина и логаута, будет ли у вас такой же 302 Found с временем отклика 1мс(т.е. запроса фактически нет).

Link to comment
Share on other sites

Nginx смотри...да и ты в ручную в .htaccess прописывал чего?

Да нет, у меня .htaccess вообще нет, какой в нем смысл в связке с nginx'ом?

SergeyH, ну у нас конфиги принципиально не отличаются, реврайты только, ну это для картинок в режиме ЧПУ. Удивило только проксирование на апач, в принципе работать конечно будет, но некоторую информацию передавать не будет, в частности реальные IP клиентов. Да, это из терминала так скопировалось.

 

 

реальные айпи передаются при включении опред.модуля апача (название щас не помню)

 

погоди. у тебя включено ЧПУ?

как это нет смысла в .htaccess .... ты запрашиваешь урл вида: сайт/55-товар.штмл а пхп должен получить сайт/товар.штмл?айди=55 - ктото же должен рерайтить урл этот.

 

П.С. тут вообще вопрос - если у тебя там фактически 1 сайт, без плохой наследственности и тяги к апачу - нафиаг тебе там вообще апач?

Link to comment
Share on other sites

Сначала почитай о nginx и для чего о нужен, а потом о .htaccess и для чего он нужен, прежде чем писать такой бред.

 

Поставь в админке галку на ЧПУ и после нажми на кнопку сгенерить .htaccess...

Link to comment
Share on other sites

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

 

И лучший редирект с www на без www в nginx это такой:

 

server {
    listen  127.0.0.1:80;
    server_name  www.site.ru;
    rewrite ^ http://site.ru$request_uri? permanent; #301 redirect
}
server {
	listen 127.0.0.1:80;
	server_name site.ru;
	proxy_temp_path /var/cache/nginx/site.ru;
	rewrite ^(/manager/.*)$	https://$host$1	permanent;
	error_page 404 = @fallback;
	location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
		proxy_pass http://127.0.0.1:8080;
		proxy_redirect http://site.ru.ru:8080/ /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr;
}

 

....и т.д.

 

 

P.S.: пути к файлам и папкам в моих конфигах подойдут для тех у кого Centos/fedora, для всех остальных гостевых операционок эти пути могут быть другими.

Link to comment
Share on other sites

реальные айпи передаются при включении опред.модуля апача (название щас не помню)

Все правильно, при включении модуля ngx_http_realip_module, но IP передаваться не будут, если ты не передашь их явно proxy_set_header X-Real-IP $remote_addr; а в апаче не примешь, соответственно, модулем mod_rpaf: RPAFheader X-Real-IP. По крайнем мере, так это работает в теории.Ладно, это оффтоп.

погоди. у тебя включено ЧПУ?

как это нет смысла в .htaccess .... ты запрашиваешь урл вида: сайт/55-товар.штмл а пхп должен получить сайт/товар.штмл?айди=55 - ктото же должен рерайтить урл этот.

Это делается внутри nginx'а:

rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$2$4 last;
rewrite ^/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$1$3 last;

Я, собственно, это и имел в виду, когда говорил о смысле htaccess'а в связке с nginx'ом, не знаю че вы так взъелись:), мне кажется это логически правильным, разруливать урлы на уровне nginx'а, а не передавать эту функцию тормозному апачу. Нет, ЧПУ у меня не включен, надо сначала разобраться с этим кэшем.

П.С. тут вообще вопрос - если у тебя там фактически 1 сайт, без плохой наследственности и тяги к апачу - нафиаг тебе там вообще апач?

Хороший вопрос)) пока не разбирался с php-cgi, так-то да, надо переходить. В PHP 5.3 модуль php-fpm уже встроен, так что сам бог велел. Сейчас разбирусь с этим магазином, все равно потом буду переносить его на другой vps, более мощный, там и буду экспериментировать.

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

Удивительное замечание. Это серьезно? Есть где-то в официальных источниках такое замечание? Просто это как-то очень странно, с точки зрения программирования, делать какую-то привязку к www или наоборот без неё.

И лучший редирект с www на без www в nginx это такой:

ок, попробую. Как-то даже не заморачивался по этому поводу, видел где-то такую конструкцию, вот и вставил.

 

Ну а по существу, кто-нибудь проверял логин? Такие же симптомы?

Link to comment
Share on other sites

Ну да касяк есть, связан он определенно с кэшированием, думаю что трабла где то в nginx, что то там надо прописать чтобы все ок было..

Link to comment
Share on other sites

по поводу реал-айпи - я не помню как именно реализовал - но на текущий момент все работает)

И апач с бэкенда тоже хочу убрать, но у меня на сервере несколько сайтом, переписывать правила влом.

По рерайту - его да можно на нжинксе делать, но у тебя то в конфиге этого нет, во всяком случае в том что ты приложил в посте.

 

Короче как решишь проблему - отпишись, интересно).

Link to comment
Share on other sites

Я тут нарыл новую информацию по скрещиванию nginx и memcached, судя по манам, они работаю вовсе не так как мы тут с вами пишем в конфигах. Если взять теорию:

831796b7901dd5f7975d544527a232f7.png

То nginx сначала обращается к memcached и если не находит там кэша, тогда уже проксирует запрос апачу (ну или php-fpm), т.е.

location / {
			set $memcached_key "localhost$uri";
			memcached_pass 	localhost:11211;
			error_page 404 405 502 503 = @backend;
}

location @backend {
			proxy_pass http://127.0.0.1:8080;
			proxy_redirect http://site.ru.ru:8080/ /;
			proxy_set_header Host $host;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Real-IP $remote_addr;
} 

Ну или вообще через ngx_http_upstream модуль. А так получается, что мы посылаем запрос с nginx'а апачу, апач генерит информацию, кладет ее в memcached и возвращает ответ nginx'у, а тот никогда не берет ее в memcached.

Или я чего-то путаю?

 

P.S. Ладно, пока я в тупике, не буду вас грузить)) как решу, отпишусь.

Link to comment
Share on other sites

Прикол в том что я в Chorme не как не мог выйти с сайта и после пошел за кофе, пришел минут через 10 и перезагрузил страницу..и о чудо! я был не авторизован, на всех страницах все ок...у меня Chrome...я еще раз попробовал зарегистрироваться и выйти, после подождал минут 10 и опять о чудо! я не авторизован.

 

У кого какие мысли?

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Глянул firebug..при нажатии на выход идет 302 запрос, а при обновлении страниц пишет везде 304...т.е. без изменений..

Link to comment
Share on other sites

можно на пальцах: отключаем мемкеш - тестируем, включаем - тестируем.

при таких вот грубых тестах - я вижу ускорение отдачи контента.

 

Предполагаю, что раз мемкешед нативно прописан в Престе все выглядит примерно так:

Нжинкс запрос Апачу/ПХП -> далее уже они смотрят в мемкеш и либо отдают кэш, либо генерят страницу.

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

Link to comment
Share on other sites

Прикол в том что я в Chorme не как не мог выйти с сайта и после пошел за кофе, пришел минут через 10 и перезагрузил страницу..и о чудо! я был не авторизован, на всех страницах все ок...у меня Chrome...я еще раз попробовал зарегистрироваться и выйти, после подождал минут 10 и опять о чудо! я не авторизован.

 

У кого какие мысли?

 

 

вы ж там в выше вроде бы обсуждали хранение сессий в мемкеше.

поставь в пхп.ини - session.save_handler = files

и проверь еще раз.

Link to comment
Share on other sites

Memcache я удалил, а в php.ini все как надо стоит, да и к тому же если бы там стояло не верное значение то я бы вообще не смог бы даже зайти на сайт.

Link to comment
Share on other sites

Пришлось поставить: proxy_cache off;....только теперь все работает ок(( жалко, ответов не нашел..

 

А проблема идет с cookie, какое то особое правило нужно для prestashop чтобы cookie нормально передавались.

Link to comment
Share on other sites

полез читать про

нашел вот это http://wiki.enchtex.info/practice/nginx/cache оч интересно, до этого я кешем на нжинксе не рулил

 

п.с. а какие у тебя показатели были по loadimpact при включенном кешировании? Интересно есть ли смысл.

Link to comment
Share on other sites

Становится все веселей. Вырубил апач совсем, установил PHP 5.3, скрестил его с nginx'ом через php-fpm. Все тоже самое осталось:blink:.

Теперь еще другие сайты перенастраивать, не все поднялись((. Но на апач больше не вернусь.

 

P.S. Кстати, я отключил мемкэш в престе.

Link to comment
Share on other sites

Становится все веселей. Вырубил апач совсем, установил PHP 5.3, скрестил его с nginx'ом через php-fpm. Все тоже самое осталось:blink:.

Теперь еще другие сайты перенастраивать, не все поднялись((. Но на апач больше не вернусь.

 

P.S. Кстати, я отключил мемкэш в престе.

 

 

Да потому что дело в nginx, а не в apache или версии php...я же уже все проверил, нужны специальные настройки для nginx под престу..не сохраняются там cookie, параметры сессии кароче..

Link to comment
Share on other sites

алё улю

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

 

кукам какая ваще разница какой вебсервер! У тебя и правда не сохраняются куки или ты предполагаешь?

Давайте вернемся к изначальным проблемам - я так понял они разные в обоих случаях?

Из конфига нжинкса - выкинуть все лишнее и поставить околодефолтные настройки, без кешей и прочей мути и на них уже потом навшивать.

 

Эх... зацепили, уже руки чешутся тоже апач кильнуть, давно сдерживаюсь))

Link to comment
Share on other sites

У меня на одном vps 6 сайтов и там необходимо жесткое разграничение кэша для каждого сайта и своя кей зона, с конфигом у меня все ок кроме того места где престашоп...с сайтами на дригух cms все ок, а с престой траблы, сессия или куки хз че там не сохроняется.

 

Просто если я для престы указываю отдельную папку для хранения кэша, назначаю кейзонуи т.д что работает и с битрексом и с другими двумя cms, а вот с престой не хочет, как только убираю кэш в отдельную папку так сразу все начинает работать нормально...

 

Мой конфиг на первой странице.

Link to comment
Share on other sites

Есть кое какие новости:) Дело скорее всего в заголовках, которые приходят от nginx'а к клиенту, и которые запоминаются у клиента, я принудительно запретил пересылать заголовки от PHP к клиенту через nginx

fastcgi_hide_header "Cache-Control"; #Это подавляет вывод заголовка PHP
add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"; #Устанавливает свой заголовок
fastcgi_hide_header "Pragma"; #Тоже самое (для старых браузеров)
add_header Pragma "no-cache";

И заработало, правда теперь браузер каждую страницу загружает с сервера, вне зависимости от того, что преста может там выдавать в заголовках Cache-Control. Но при этом, nginx все-таки (вроде) кэширует страницы, по крайней мере в /var/cache/nginx/ кэш появляется и, я надеюсь, отдает клиенту из своего кэша. Конечно работа сайта замедлилась, раньше при переходе по сайту, выдача была мгновенная, потому что данные брались из кэша браузера, сейчас она стала зависеть от ширины канала. Было бы здорово, если бразуер все-таки кэшировал страницы, но и чтобы обращал внимание на Last-Modified и загружал обновленные страницы.

Нашел интересную статью по кэшированию

И ещё, никак не могу понять кто сохраняет сессии на серверной стороне nginx или php-fpm, дело в том, что я выхожу из аккаунта, чищу куки, чищу папку /var/cache/nginx/ чищу /var/lib/php/session/ еще какая-то папка /var/lib/nginx/tmp с пустыми подпапками, затем обновляю страницу и мне в ответе сервера валится мусор в Set-Cookie с той сессионной переменной кук, которую я только что почистил в браузере и браузер ее опять устанавливает, правда авторизация не происходит, просто восстанавливается сессия, блин, зачем вообще устанавливать куки, если это неавторизованный гость?! Причем! я так и не понял в чем прикол, первый раз сервер ответил таким мусором:

Set-Cookie: 8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGgu ...
%3D%3D000148; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly

Я очистил куки в браузере, обновил страницу (авторизация, соответвенно, отвалилась), опять аворизовался и сервер прислал тоже самое плюс еще столько же мусора, начинающегося тем же ключом 8812c36dg47e336c2a77bf63211d899a. После нескольких таких "авторизаций", сервер мне щас сыпет целую кучу их:

8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6l ...
Hw%3D%3D000148; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K1 ...
kO1sbsU1kjeBvbtcrzwfFeyMcS8uqie3XecI000182; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K ...
000213; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly 
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K1v ...
223; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly 
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K1 ...
AAL6oO%2FNnYOk000234; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly 
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K1 ...
000275; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K1 ...
vHWZERtOwdv6vXhIye%2BP0A%3D%3D000302; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly 
8812c36dg47e336c2a77bf63211d899a=%2Fee3ItUZbMdAB%2F7TYvGguC5Tl6lyBt4K ...
5kVP6v6V1g%3D%3D000301; expires=Mon, 05-Sep-2011 08:36:47 GMT; path=/; domain=anybrands.ru; httponly

Это что за прикол?!:) Косяк nginx'а из-за того что я принудительно чистил куки или такой метод авторизации престы?

Link to comment
Share on other sites

уф, сколько всего... тяжело конечно в таком потоке информации чтото понять и предложить))

Кратко - сессии и куки - это нормально!))

То что ты видишь после обновления страницы - это не мусор, а новая сессия, что именно с ее помощью хранит Преста, это уже второй вопрос, например список посещенных товаров и т.п.

А по поводу инвалидации кеша - я тему создавал, у меня тоже в админке не обновляется некоторая инфа сразу после изменений, но там ajax... и я не лазил в заголовки и прочее.

 

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

мне уже самом у интересно)

Link to comment
Share on other sites

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

Такую конфигу можно считать околодефолтной?

location / {
   	fastcgi_pass 127.0.0.1:9000;
   	fastcgi_index   index.php;
   	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   	include fastcgi_params;

   	fastcgi_connect_timeout 60;
   	fastcgi_send_timeout 180;
   	fastcgi_read_timeout 180;
   	fastcgi_buffer_size 24k;
   	fastcgi_buffers 16 24k;
   	fastcgi_busy_buffers_size 24k;
   	fastcgi_temp_file_write_size 256k;
   	fastcgi_intercept_errors on;
}

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

Кэширование в престе отключил, memcached в системе не могу отключить, потому что он является модулем php, не охота лезть в настройки, он точно не действует, session.save_handler = files

Кстати, вот если надо мой phpinfo().

Link to comment
Share on other sites

стандартно, не буду сюда ей приводить. Вот с такой конфигой авторизация сейчас работает (как ни странно:)) Теперь уже и не вспомнишь, чего изменилось с последней конфы и че это оно заработало.

Кэширование в престе отключил, memcached в системе не могу отключить, потому что он является модулем php, не охота лезть в настройки, он точно не действует, session.save_handler = files

Кстати, вот если надо мой phpinfo().

 

 

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

2. memcache - это модуль пхп для работы с memcached - sudo service memcached stop, но см п.3

3. если работает - то это же зае гуд

 

и кстати поделись ссылкой по скрещиванию nginx + php-fpm и это, рерайты для престы переписал под нжинкс переписал все? если можешь - делись)

Link to comment
Share on other sites

2. memcache - это модуль пхп для работы с memcached - sudo service memcached stop, но см п.3

Да, все, тупанул, про сам демон забыл, но он у меня все равно не запущен.

 

А насчет мануала по скрещиванию, как такового полного не нашел, из разных мест надергал информации и соединил. Да там ничего сложного нет. Ставить рекомендую PHP 5.3, тогда не придется патчить его fpm'ом, он там уже в виде модуля. Вот только, по ходу, придется удалять старый php, по крайней, мере у меня не хотел без этогоставиться, ругался на несовместимость, так что готовься далее сращивать его с апачем, если не будешь сносить последний. Есть еще такая программка как spawn-fcgi из состава lighthttpd, вот тут про него, но она, судя по тестам, тормознее и там надо писать доп. скрипты по ее запуску.

Вот тут кратенько по установке PHP 5.3 на CentOS. Поскольку у CentOS там что-то не срослось с RedHat на почве лицензий, я так понял, они переименовали php53 в php53u. Я ставил эти пакеты из ссылки. Они ставится из репа epel. Он тянет еще какие-то зависимости из других репов, но у меня подключены только стандартные, так что проблем не будет.

Далее редактируем конфиг /etc/php-fpm.d/www.conf там все интуитивно понятно

listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
user = nginx ; такой же юзер, под которым запущен и сам nginx
group = nginx

Остальные параметры - тюнинг, читай мануалы, подбирай под параметры своего vds.

Запускаем службу service php-fpm start, втыкаем его в автозапуск chkconfig php-fpm on и все, можно настраивать nginx - здесь, здесь ну и, собственно, здесь.

Link to comment
Share on other sites

ага, ну примерно ясно, а пхп у меня изначально 5.3

 

Самый важный вопрос - ты под нагрузкой типа лоадимпакта тестировал до/после удаления апача?

у меня по данным гугл вебмастер тулс отдается гдето за 2 сек страница категории с 25 товарами, по лоадимпакт примерно те же данные, очень хочется довести до < 1 сек, так что вопрос разноуровневых кешей остается открытым.

 

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

Link to comment
Share on other sites

#################### configuration for shoploragrig.ru; ####################
server {
	listen 178.250.241.23:80;
	server_name shoploragrig.ru www.shoploragrig.ru;
	proxy_temp_path /var/cache/nginx/shoploragrig.ru;
	rewrite ^(/manager/.*)$	https://$host$1	permanent;
	error_page 404 = @fallback;
	location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
		proxy_pass http://178.250.241.23:8080;
		proxy_redirect http://shoploragrig.ru:8080/ /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr;
}
	location / {
		proxy_pass http://178.250.241.23:8080;
		proxy_redirect http://shoploragrig.ru:8080/ /;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr;
		client_max_body_size	10m;
        client_body_buffer_size	128k;
        proxy_connect_timeout	90;
        proxy_send_timeout		90;
        proxy_read_timeout		90;
	        proxy_buffer_size 64k;
	        proxy_buffers 16 64k;
	    proxy_busy_buffers_size	128k;
	    proxy_temp_file_write_size	128k;
           proxy_cache off;
}
	location ~* ^.+\.(jpg|jpeg|gif|png|css|pdf|js|htm|html|shtml)$ {
		root /var/www/admin/data/www/shoploragrig.ru;
		index index.html index.htm index.php;
		expires 1y;
	}
	location @fallback {
		proxy_pass http://178.250.241.23:8080;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr;
	}
}

 

Вот так у меня все работает....

 

Кэшируется ли у меня там что хз, сайт работает быстро, папака cache пустая потому что "proxy_cache off;"

Link to comment
Share on other sites

ну.. быстро, понятие растяжимое) цифры нужны, цифры.

У меня в офисе канал в 1 Мбит, а дома 100 - вроде и там и там быстро работает, но дома все таки быстрее)) канал конечно не показатель, но чем быстрее сервак отдаст контент, тем быстрее он начнет лезть в узкое горлышко канала)

Link to comment
Share on other sites

Самый важный вопрос - ты под нагрузкой типа лоадимпакта тестировал до/после удаления апача?

у меня по данным гугл вебмастер тулс отдается гдето за 2 сек страница категории с 25 товарами, по лоадимпакт примерно те же данные, очень хочется довести до < 1 сек, так что вопрос разноуровневых кешей остается открытым.

До мерил как-то, но уже не помню цифры, помню что httpd сильно валил, каждый процесс под 10%, сейчас вот что

http://loadimpact.com/result/www.anybrands.ru

eb74fb383c164bc2907be5e2f9364657.jpegc1dabf14b1bff01874985991fbe79567.jpeg818fd4049c164638049ef1789635782f.jpeg

057aae1e50ade9cb9e08843049db535e.jpegea1542b550f93f20903537d3836b4dac.jpeg

Link to comment
Share on other sites

... так что вопрос разноуровневых кешей остается открытым.

Согласен, пока беру паузу, раз все работает, разберусь с кэшированием, напишу

Link to comment
Share on other sites

#################### configuration for shoploragrig.ru; ####################

Ты зря центральные банеры назвал advertising, у меня их сразу зарубили, один AdBlock, другой каспер и сайт сразу пустым показался. Назови как-нибудь безобидно. А так приятный дизайн.

Link to comment
Share on other sites

До мерил как-то, но уже не помню цифры, помню что httpd сильно валил, каждый процесс под 10%, сейчас вот что

 

даже интересно почему такой вид графика... из-за свопа может, у меня график - почти ровная линия на уровне примерно 2с.

Кстати самое наличие swap говорит о том что памяти надо бы поболе?

В любом случае диапазон 1-2 сек - гуд

Link to comment
Share on other sites

#################### configuration for shoploragrig.ru; ####################

Ты зря центральные банеры назвал advertising, у меня их сразу зарубили, один AdBlock, другой каспер и сайт сразу пустым показался. Назови как-нибудь безобидно. А так приятный дизайн.

 

Адблок же вроде умеет рубить и по типоразмерам стандартным? Самые умные делают размер баннера на 1-2 пикс меньше))

Link to comment
Share on other sites

Кстати самое наличие swap говорит о том что памяти надо бы поболе?

Вполне может быть, памяти у меня всего 512Мб. сейчас свободно около 200, VDS с 2Г у хетцнера стоит 800р/мес. Для рабочего магазина возьму его.

Link to comment
Share on other sites

~]# top
top - 17:56:00 up 3 days, 22:45,  3 users,  load average: 1.65, 1.00, 0.89
Tasks:  96 total,   2 running,  94 sleeping,   0 stopped,   0 zombie
Cpu(s):  3.0%us,  1.0%sy,  0.0%ni, 96.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2883584k total,  2824092k used,    59492k free,   137776k buffers
Swap:   522104k total,    26688k used,   495416k free,  2136836k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                            
4604 root      15   0  2404 1084  824 R  0.0  0.0   0:00.00 top                                                                 
24713 root      15   0  8420 2608 2116 R  0.0  0.1   0:00.00 sshd: root@pts/2                                                    



 

хм если бы не сделал top не заметил бы что у меня swap начало кушать...

Link to comment
Share on other sites

Пообщался я с людьми хорошими на форуме forum.nginx.org правда по поводу сайта на другой CMS но с теми же проблемами и очень много узнал нового если честно и получил серьезную помощь там, так же я теперь знаю в какую сторону по отношению к prestashop нужно капать и в чем проблема.

 

Вот что помогло мне для сайта на другой CMS но с той же проблемой:

 

location / {
.........
proxy_cache_valid 200 3h;
proxy_cache_valid any 0;
proxy_cache_use_stale updating error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_cache_key "$host$uri?$args$cookie_uid$cookie_autol$cookie_autop";
proxy_no_cache $cookie_orderData $cookie_nocache  $arg_nocache $arg_comment;
proxy_cache_bypass $cookie_orderData $cookie_nocache  $arg_nocache $arg_comment;
.........
}

 

Наврятли этот код поможет для prestashop, он просто может указать в какую сторону копать.

 

Дело в том что для любой CMS прежде всего нужно указать правильный proxy_cache_key, а чтобы его правильно указать нужно узнать какие у страницы могут быть модификаторы важные для кеширования прежде всего, так же узнать в чем/где храниться идентификатор, например $cookie_uid или $cookie_sid ну и т.д.

 

Так же нужно указать proxy_no_cache, если версия nginx выше 0.8.46+ то так же и proxy_cache_bypass с аналогичными параметрами, естественно параметры тоже должны быть подходящие именно для prestashop.

 

Если кто въедит в это и разберется быстрее меня, просьба написать тут решение!

 

P.S.: Расшифровка $host$uri?$args$cookie_uid$cookie_autol$cookie_autop:

 

$host site.ru

$uri? ссылка на раздел сайта + что можно указать аргументы после нее

$args аргументы, ну иметься ввиду что в таком то ID, есть такой то товарный ID ну и т.д

cookie_uid уникальный идентификатор пользователя

$cookie_autol$cookie_autop как мне сказали параметры нужны чтобы яндекс не нароком не проиндексировал инфу пользователя о нем и заказе..как было с мегафоном.

Link to comment
Share on other sites

Проблема что в первом посте...проблема с печенюшками

 

Их целая куча:

 

Авторизация не сохраняется при переходе на главную страницу.

На странице с авторизацией страница при успешной авторизации не обновляется, при переходе с нее на другую Страницу видно что зарегистрировались.

Не возможность сделать выход, авторизация сохраняется.

Передача куки чужим пользователям.

Индексация закрытого профайла пользователя и его заказов поисковиками

 

На лицо проблема с печеньками.

Link to comment
Share on other sites

Дык.. исходники проблемы какие? То что ты называешь - последствия. У меня, например, не наблюдается ничего из вышесказанного.

Юзаю мемкешед+нжинкс+апач, даже если перейду как наш третий участник на мемкешед+нжинкс без апача - проблема не должна возникнуть.

За счет чего она появляется у тебя? Специфика применения какая?

 

 

Link to comment
Share on other sites

А у тебя в nginx/cache папки с файлами создаются?

 

 

Если указать proxy_cache_path /var/cache/nginx/cache/charmante levels=1:2 keys_zone=one:16m inactive=7d max_size=1024m;

 

Не важно даже какие там цифры, а именно вот если путь указать то по указанному пути если в location добавить proxy_cache и указать имя key зоны например one как выше, то в указанной папке создаются файлы?

Link to comment
Share on other sites

да я не использую директив proxy_cache это как раз то о чем я говорю - специфика.

В чем фишка такого кеширования? Насколько оно лучше дефолтного + мемкеш?

Т.е. я пока не могу понять нафига это вообще, т.е. предположить могу, но практическая сторона под вопросом)

п.с. не fast cgi

Link to comment
Share on other sites

Ок постараюсь объяснить, у меня не 1 сайт на VPS, сейчас их там 6 и хранить их кэш в одной папке создает проблемы. Какие? Напишу:

 

1)Самый первый epic fail был когда я поставил кэшировать txt и всем сайтам выдался один и тот же robots.txt…По аналогии могут быть везде одинаковые favicon, css, js, картинки и т.д.

 

2)У меня два сайта на одной CMS и два сайта на другой и они имеют “схожести” так как еще и дизайн у них один, просто один сайт это интернет-магазин, а другой каталог..и вот если картинку на одном меняешь, то она не меняется, потому что она берется из кэша и сравнивается с картинкой другого сайта..

 

3)Разграничение по папкам может помочь обнаружить где кэширование работает, а где нет. Так же поиск файла чтобы удалить его из кэша занимает меньше времени.

 

4)Когда правишь конфиг NGINX который повлияет на кэширование нужно почистить кэш чтобы посмотреть результат, а чистить общий кэш когда это касается одного сайта это бред.

Link to comment
Share on other sites

Опять друг друга не поняли - я справшиваю - ЗАЧЕМ тебе кеш именно на нжинксе? Зачем ты вообще его используешь?))

 

а по поводу разграничения/инвалидации, я не вникал в возможности нжинкс, но вижу

proxy_cache_key ...

т.е. по логике п.1-4 вполне себе разграничиваются по уникальному айди для каждого ресурса.

Отдача кеша одного сайта по запросу другого - нонсенс, явно неправильно настроен вебсервер.

Link to comment
Share on other sites

Да без nginx у меня VPS и три сайта ели держит..у меня два сайта создают очень высокую нагрузку на проц и создают много запросов к bd, nginx реально спасает..

 

По поводу разграничений по IP...я сочканул и у меня сайты доменами прописаны в nginx и к тому же на внешних IP, а не по внутренним IP как надо..

Link to comment
Share on other sites

Ого сколько тут нового:)

Зачем тебе КЕШ на нжинксе?

Ну хотя бы потому что эту будет быстрее, чем все остальные виды кэширования, даже если использовать memcache, все равно его будет отдавать nginx, пару тактов на запрос/ответ - это конечно не секунды, но тем не менее. Кроме того, я тут уже выше писал, что с такими конфигами, как у нас с вами, memcached не задействован, чтобы nginx отдавал кэш из Memcache'а, конфига должна быть такой:

server {
location / {
   	set 			$memcached_key   "$uri?$args";
   	memcached_pass  host:11211;
   	error_page  	404 502 504 = @fallback;
}

location @fallback {
   	proxy_pass  	http://backend;
}
}

Иначе он не используется, пускай даже PHP добросовестно будет писать туда данные, забираться они не будут. Вот еще.

Link to comment
Share on other sites

У меня используется, бэком стоит апач, там все настроено.

 

А по остальному - пхп (преста) сама по себе юзает мемкеш/файловый кеш + получается мы насильно добавляем кеш вебсервера.

Как дружат друг с другом эти 2 кеша? Они знают вообще о существовании друг друга? При инвалидации скрипты тоже в курсе?

 

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

 

П.С за конфиг спасибо, полез изучать тему. нашел

http://www.opennet.r...cached.txt.html

 

(производительность связки nginx+memcached куда выше чем можно добится уnginx+(apache/mod_perl для X-Accel-Redirect)+ memcached)Такая связка реально работает и показывает очень приличную производительность

(сколько максимум так можно отдавать не знаю... думаю упрется в ethernet).

 

 

оч интересно, буду думать

Edited by SergeyH (see edit history)
Link to comment
Share on other sites

Оффтоп, может кто подкинет ссылки как к доменам на VDS назначить внутренние ip и в nginx указывать не внешние, а внутренние ip....блин либо это так просто что не кто даже не пишет как это сделать или я все не как не могу задать правильную поисковую фразу...

Link to comment
Share on other sites

Оффтоп, может кто подкинет ссылки как к доменам на VDS назначить внутренние ip и в nginx указывать не внешние, а внутренние ip....блин либо это так просто что не кто даже не пишет как это сделать или я все не как не могу задать правильную поисковую фразу...

Не совсем понял вопрос, все домены на одном сервере или на разных. /etc/hosts не подойдет?

i3.domain.ru 127.0.0.1

sport.shop.ru 192.168.1.101

И откуда нужно обращаться к ним? Если только с сервака, то так, а если планируется передавать эти поддомены клиенту, то нужно настраивать DNS твоего хостера(если он есть), у меня у хетцнера его нет (или он платный), так я использую бесплатный afraid.org.

А какая разница по каким апишникам обращаться? Скорость от этого не изменится, они же находятся в одной физической сети. Или я неправильно понял вопрос.

Link to comment
Share on other sites

Да все там понятно написано было...

 

У меня у одного VPS сервера два внешних IP, на нем 6 сайтов.

 

В HTTP и NGINX домены привязаны к внешним IP, т.е. httpd и nginx слушают парты (8080/80) на внешних IP и по моей теории при наличии большого кол-во сайтов и посетителей на них, вырастает трафик который забивает из-за этого интернет канал внешних IP и из-за этого например можно долго по SSH или к FTP конектится, а так же у кого трафик не анлим..., сайты могут так же медленнее грузиться. А если указать внутренние IP то вся инфа будет летать в пределах VPS сервера..я как то так себе это представляю.

 

В общем как есть и что надо:

 

К ДНСам провайдера кто VPS предоставляет доступ есть и все зоны для доменов прописаны и естественно в А записи стоят у доменов внешние IP.

 

На самом VPS добавлены эти два моих внешних IP и добавлены домены, 5 на одном IP, и один на другом внешнем IP.

 

В HTTP и NGINX все конфиги для виртуальных хостов прописаны с использованием внешних IP.

 

Мне надо переписать в HTTP и NGINX виртуальные хосты на внутренние ip к примеру на 127.0.0.3/4/5/6/7 или 192.168.1.3/4/5/6/7

 

И чтобы все это работало)

 

Вот как это сделать)? я просто даже не могу сформулировать правильную поисковую фразу чтобы найти в гугле доки по этому.

Link to comment
Share on other sites

В HTTP и NGINX домены привязаны к внешним IP, т.е. httpd и nginx слушают парты (8080/80) на внешних IP и по моей теории при наличии большого кол-во сайтов и посетителей на них, вырастает трафик который забивает из-за этого интернет канал внешних IP ...

Нет:rolleyes: все нормально, никуда он[трафик] не ходит, он крутится только внутри хоста.

Ты не совсем правильно представляешь себе природу сетевых интерфейсов. Сколько бы ты не навесил на один интерфейс айпишников, маршрутизация от этого не изменится, они все буду просто алиасами, какой бы ты не повесил на интерфейс айпишник (внешний или локальный), хост сам к себе будет обращаться как к 127.0.0.1, в винде можно посмотреть route print, вот у меня:

Сетевой адрес	Маска сети	Адрес шлюза	Интерфейс	Метрика
XX.78.222.247	255.255.255.255	127.0.0.1	127.0.0.1	50

внешний апишник для системы значится как локалхост и пофигу на то внешний он или локальный. И хостер твой считает трафик между твоим сервером и клиентами, а не внутри твоего сервера, ты физически не сможешь задать такую маршрутизацию, чтобы хост сам к себе ходил через какой-то коммутатор или роутер.

На скорости это тоже никак не отражается, еще раз повторяю, система видит свой интерфейс, на котором висит внешний айпи, как локалхост, так что не парься.

Link to comment
Share on other sites

  • 7 months later...

ап, интересная тема, продолжаем

 

вот такая ошибка при включении в конфиге нжикса fast cgi

 

1834#0: unknown directive "includefastcgi_params" in /etc/nginx/sites-enabled/default:51

nginx.

Link to comment
Share on other sites

  • 1 month later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...