Если кеш нужно тупо выплюнуть браузеру, то можно так:
//кэш $cacheName = "cache/" . md5($url) . ".cache"; $cacheExists = file_exists($cacheName); if(!$cacheExists) { //создаём кэш ob_start(); getData(); //условная функция, собирает страницу и выводит её $data = ob_get_contents(); ob_end_clean(); echo $data; if(is_null(error_get_last())) { file_put_contents($cacheName, $data, LOCK_EX); //КЭШ СОЗДАН } } else //либо грузим из кэша { readfile($cacheName); //ЗАГРУЖЕНО ИЗ КЭША }
П.С.
Не хватает времени кеширования.
С функциями хеширования возможны колизии.
Посмотрите также в сторону fastcgi кеширования.
Страницу целиком можно не кешировать, а нарезать ее на маленькие блоки.
Зачем нагружать php, если это можно сделать на веб-сервере?
Коряво:
имена переменных
header("Location: http://www.site.ru/$newurl", true, 301);
Странно, что для css отдается html.
Проверьте настройки хостинга, сделайте css статичным, меняйте хостера.
Заметил, что есть редкие обращения через 4-15 минут от первого посещения.
В основном из китайских IP.
Обращение в основном зафиксировано одно с IP и оно просроченное.
Ответ выкачивают не весь.
А так запросы, судя по логам, якобы закешированы. Только первый запрос не с кеша.
Установил кеш 15 мин.
По логам некешированный только первый запрос.
Но все равно левый трафик есть.
Таким образом у меня будет 8 исходящих по 0,1 МБит/с.
А мне нужно 1 исходящее на 0,8 МБит/с
Что еще могу сказать:
Время кеширования достаточно. ИНтервал между первым и последним запросом к файлу - 1 мин.
Какие вижу варианты:
1. Сделать промежуточный прокси (с хранением кеша в том же месте, если это 1 физический сервер).
Но если к этому прокси будет стучаться несколько бекэндов, то тоже возможна ситуация с повторными запросами.
2. Отдавать через fastcgi_cache_lock + php
Блокировку запросов делать уже в php, если поступил второй такой запрос.
Только непонятно, что будет, если по повторному запросу отдать допустим 503 ответ.
Если бы у X-Accel-Redirect можно было задать время.
3. Отдавать через try_files + fastcgi_cache_lock + php
После скачивания ложить файл, куда нужно, и время fastcgi кеша пару секунд, чтобы не было дублирования.
Ложить файл через fastcgi_store или php.
Тоже непонятно, что будет, если по повторному запросу отдать допустим 503 ответ.
4. Отдавать через try_files + php
После скачивания ложить файл, куда нужно.
По повторному запросу отдаем заголовок 'Refresh: 3; url=http://'.$_SERVER['HTTP_HOST'].$uri
Браузер через 3 секунды придет, а файл уже будет.
(на данный момент такая схема используется в другом месте)
5. Посмотреть на встроенный в nginx lua | perl
6. Отправить багрепорт в nginx. :)
Однобайтовая кодировка - это не плохо.
А многобайтовая может быть чуть хуже из-за большего размера страницы и времени ее скачивания.
Если все нужные символы влезают в win-1251 или html-entities, то смысла переходить нету.
Циферные ссылки для более быстрого поиска в базе данных.
Также у новости может поменяться текстовый юрл, но циферный останется.
Сайты в моей тематике (онлайн ТВ) постоянно рендомизируются во всех ПС. :)
Постоянно появляются новые сайты в ТОП-10.
Любую Любую
RewriteCond %{REQUEST_FILENAME} !^/blog/.*\.html$
RewriteCond %{REQUEST_URI} !^/blog/.*\.html$
Проверял на локальном сервере, все работает...
Замена приведет к тому, что не будут обрабатываться адреса вроде:
/blog/bla-bla-bla?query_string=some.html
:)