История изменений
Исправление
Spoofing,
(текущая версия)
:
Nginx может только целиком кэшировать всю страницу. А что если юзер , скажем, залогинен и нужно показывать его имя?
эм, нет. я тут ругаю SSI, благодаря ей можно легко закэшировать отдельные блоки, как это сделал я в своём ЖЖ.
http://i.imgur.com/lrFGRMc.png
поясню скриншот.
в шапке сайта, на каждой странице, находится блок с авторизацией пользователя, ещё в этом блоке есть IP-адрес посетителя.
то есть, нам надо кэшировать: страницу целиком + авторизацию + IP-адрес, — выходит жирновато на одного анонимуса который зашёл на сайт один раз и вышел, а для него аж целая страница сгенерилась! ага...
поэтому каждая страница состоит из трёх частей: основной контент, который для всех общий, + блок авторизации, + строка с IP-адресом.
справа в vim, сверху вниз, можно увидеть SSI: из шапки дёргается <!--# include virtual="/session_id.php" -->
, в нём дёргается <!--# include virtual="/remote_addr.php" -->
(последний на самом деле можно было заменить на echo var=«REMOTE_ADDR», который SSI, но для чистоты эксперимента я осознанно предпочёл «костыль» в виде php ради одной строки IP-адреса).
слева открыт конфиг nginx, там каждый блок указан вручную, который кэшируется: /index.php основной контент сайта, блок авторизации /session_id.php, и IP-адрес /remote_addr.php, — каждый в отдельности кэшируется, и складывается в /dev/shm, теперь посмотрите на консоль вверху справа, там выхлоп find: итого мы имеем три файла, — контент - просто контент, авторизация с ключём $cookie_sessionid, ip с ключём $remote_addr (смотрите левее fastcgi_cache_key на каждый файл). все эти блоки складываются при помощи SSI в одну страницу и отдаются пользователю. содержимое блоков и ключ видно из выхлопа cat.
ну и внизу бенчмарк производительности ЖЖ.
без кэширования, на чистом php, раздел /blog/ выдавал 300 rps. но теперь, на закэшированной статике при помощи ssi nginx обрабатывает от 1600 rps — 2200 rps! прикиньте, было 300, стало 2000 в среднем. при этом абсолютно ничего не изменилось, динамика продолжает работать, когда надо!
тестируется на 150мбит'ном Wi-Fi между двумя ноутбуками: скорость доходит до 50мбит, но всё упирается в процессор сервера.
хочу 4-х ядерный ноутбук. =)
Исходная версия
Spoofing,
:
Nginx может только целиком кэшировать всю страницу. А что если юзер , скажем, залогинен и нужно показывать его имя?
эм, нет. я тут ругаю SSI, благодаря ей можно легко закэшировать отдельные блоки, как это сделал я в своём ЖЖ.
http://i.imgur.com/lrFGRMc.png
поясню скриншот.
в шапке сайта, на каждой странице, находится блок с авторизацией пользователя, ещё в этом блоке есть IP-адрес посетителя.
то есть, нам надо кэшировать: страницу целиком + авторизацию + IP-адрес, — выходит жирновато на одного анонимуса который зашёл на сайт один раз и вышел, а для него аж целая страница сгенерилась! ага...
поэтому каждая страница состоит из трёх частей: основной контент, который всех общий, + блок авторизации, + строка с IP-адресом.
справа в vim, сверху вниз, можно увидеть SSI: из шапки дёргается <!--# include virtual="/session_id.php" -->
, в нём дёргается <!--# include virtual="/remote_addr.php" -->
(последний на самом деле можно было заменить на echo var=«REMOTE_ADDR», который SSI, но для чистоты эксперимента я осознанно предпочёл «костыль» в виде php ради одной строки IP-адреса).
слева открыт конфиг nginx, там каждый блок указан вручную, который кэшируется: /index.php основной контент сайта, блок авторизации /session_id.php, и IP-адрес /remote_addr.php, — каждый в отдельности кэшируется, и складывается в /dev/shm, теперь посмотрите на консоль вверху справа, там выхлоп find: итого мы имеем три файла, — контент, авторизация, ip. все эти блоки складываются при помощи SSI в одну страницу и отдаются пользователю. содержимое блоков и ключ видно из выхлопа cat.
ну и внизу бенчмарк производительности ЖЖ.
без кэширования, на чистом php, раздел /blog/ выдавал 300 rps. но теперь, на закэшированной статике при помощи ssi nginx обрабатывает от 1600 rps — 2200 rps! прикиньте, было 300, стало 2000 в среднем. при этом абсолютно ничего не изменилось, динамика продолжает работать, когда надо!
тестируется на 150мбит'ном Wi-Fi между двумя ноутбуками: скорость доходит до 50мбит, но всё упирается в процессор сервера.
хочу 4-х ядерный ноутбук. =)