1) линеечка находится по адресу, скажем, /cache/123.png. На самом деле папки cache нет, и запрос обрабатывается директивой ErrorDocument в апаче, и редиректит его на скрипт cache.php.
2) скрипт берёт номер линеечки (123 в нашем случае), лезет в базу, смотрит, когда в последний раз линеечка была обновлена, если надо обновить, то перерисовывает её, файлик сохраняет в папку cacheimages, ну и потом отдаёт его.
Каждый раз лезет в базу, при каждом запросе каждой линеечки. Четыреста линеечек притормаживают сервер, восемьсот линеечек потребляют 90% процессорного времени, тысяча линеечек кладёт сервер :)
Линеечки я быстро соптимизировал - поставил перед апачем Nginx в качестве кэширующего фронтэнда и настроил его примерно так:
error_page 404 =200 /cache.php;То есть Nginx сначала пытается отдать файл с линеечкой. А если его его нет, то только тогда уже передаёт вызов апачу, чтоб тот со своим еррордокументом подцепил cache.php, тот слазил в базу, обновил линеечку... ну и каждый день в полночь всё содержимое папки cacheimages, в которой лежат сделанные за день линеечки, удаляется.
location /cache.php {
proxy_pass http://127.0.0.1:80$request_uri;
}
location /cache {
rewrite ^/cache/(.*).png$ /cacheimages/$1.png break;
}
Всё работало прекрасно до тех пор, пока начальник не решил перенести линеечки на отдельный сервер вместе со всеми парсерами, и не арендовал под это дело серверок с FreeBSD на каком-то хостинге. Я там всё установил, но вот почему-то Nginx у меня не захотел настраиваться. И с такими настройками, и с сякими я его запускал - не работает так, как надо. У меня сложилось впечатление, что он игнорирует директиву error_page. Может, надо пересобрать его с какой-нибудь особенной опцией, или в конфиге где-нибудь какой-нибудь флажок включить или написать чего-нибудь? Апач, например, игнорирует RewriteRule, если не указать FollowSymLinks или ещё какой-то *SymLinks в Options. Может, Nginx тоже как-то так устроен?
Комментариев нет:
Отправить комментарий
Ублюдочный Гугл поломал форму комментариев. Извините.
Примечание. Отправлять комментарии могут только участники этого блога.