Новогодние радости

26 января 2010

Каждый новый год наш сервер падает…

И этот год не исключение :) Каждый день умирал php без видимых причин. Были остановлены ресурсоемкие пхп скрипты, но это не помогало.. И когда уже клиенты начали замечать, что по утрам форум, баннеры и сайты не работают…. пришлось искать причину.

Долго описывать смысла нет. Просто фо FreeBSD есть дейли крон и постоянным chmod 000 NAME файлов из списка /etc/periodic/daily/ и командой date 201001200259 с постоянным увеличением даты на 1 день мы дошли до февраля и  файла  /etc/periodic/security/100.chksetuid который и был успешно отключен..

FreeBSD

26 марта 2009

Теперь я понимаю почему у серверов на фри такой большой аптайм.

Новый сервер. Два ребута. Дважды пришлось использовать KVM чтобы получить к нему доступ.

Еще раз ребутать страшно…

Хотите немного серверной магии?..

5 марта 2009

Что дано: посещаемый портал, Perl и Nginx.

А теперь магия! Логинимся на портале как Finnr Rastas и просим коллегу тоже зайти на портал. И нажать пару раз Ф5.

Чудо! Финнов стало больше! Он залогинен как Finnr Rastas. Смотрим куки - их нет. Все чисто. Переходим на следующую страницу - и вы снова никто, гость.

Забавно, да? :) Куки чисты, скрипты работают исправно. На апаче же все работало годами без проблем. В чем же “престиж” трюка?

Nginx - источник серверного волшебства!

Итак “престиж” по пунктам:

1.  Perl запускается как fastCGI процесс, который слушает tcp сокет на определенном порту. Таких процессов несколько, чтобы обеспечить распараллеливание запросов. ProcManager юзать не стал в силу разных причин, может даже ошибся в его написании.

2.  Данный fastCGI скрипт запускает дочерние скрипты, которые мы собственно и запрашиваем и отдает их nginx’у.

3.  Так как это fastCGI и он все время висит в пямяти, то и переменные в нем статичные и… Переменная $ENV{HTTP_COOKIE} так же передается разным скриптам. А все почему?

Потому что в дефолном конфиге nginx’а не передается fastcgi параметр HTTP_COOKIE, т.е. в файлике fastcgi_params нет строки:

fastcgi_param   HTTP_COOKIE     $http_cookie;

И гость, у которого нет кук, подхватывает эту переменную от пользователя, что посетил сайт прямо перед ним. Чем “пользовались” спам боты и постили порнуху от лица самых активных участников форума :)

И вот так всегда, когда извесен престиж - суть фокуса, фокус перестает быть магией и становится работой…

Удачи на работе, верьте в чудеса!

IE. Абсолютное позиционироание правых уголков.

12 февраля 2009

В IE есть баг с позиционированием правого уголка.

Иногда он отображается верно, иногда съезжает на один пиксель.

Происходит такое, когда блок содержащий уголок имеет нечетную длинну.

Лечится это следующим образом:

div.right_angle { position: absolute; right: expression(parentNode.offsetWidth % 2 == 0 ? “0″ : “-1px”); }

magic_quotes или магия вокруг нас

6 ноября 2008

Вчера сделал на ИстРеке кросс постинг в ЖЖ.

Радовался не долго. Пока не решил о публиковать одну из старых записей. А в ее заголовке были кавычки.

Думаю из заголовка этого поста ясно, что кавычки стали такими: \” Что мне естесвенно не понравилось. Думал, что дело в коде, что все из-за того, что я сделал кросспост, что из-за еще кучи причин, на выяснение которых у меня ушло не менее получаса.

А потом я вспомнил. Nginx же не читает .htaccess! Ема.. подумал я и заглянул корневой htaccess.

php_flag magic_quotes_gpc off

Вот в чем дело! Озарило меня и я еще много минут гуглил, а как сделать это на nginx’e и php-fpm. Все сводилось к тому же php.ini.. заглянул, а там все отлично, все выключено. Залил на сервер файлик с phpinfo() и убедился сам.

magic_quotes_gpc off

Значит должно работать?! Проверяю - работает. Хм.. ну ладно, подумал я.. час - не сутки, зато буду умнее.

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

В итоге получаю тот же бред: \”\”

Еще пятнадцать минут мучений с кросспостингом (и даже закоменчивание его не помогает) и я выяснил, что отключил его час назад через настройки сайта… Жесть. Тогда в чем косяк? Опять как с ajax’ом из-за нового сервака? Ничего не понятно, но на всякий случай опять смотрю phpinfo().

magic_quotes_gpc on

Кажется в этом месте я попросил убить себя.

Смотрю php.ini, все отлично. Перезапускаю php-fpm, смотрю phpinfo()

magic_quotes_gpc off

Публикую запись - все работает.

Что случалось, из-за чего и как - я решил не разбираться, главное работает.  И теперь я знаю, почему эти кавычки называют магичискими. Магия вокруг нас, блин..

Кстати, если кому-то тоже надо сделать кросспостинг в жж, то можно почитать об этом тут:

XML-RPC и кросспостинг в ЖЖ - Константин Лихачев

Очень полезно :)