livetv

Рейтинг
265
Регистрация
10.02.2015

Если кеш нужно тупо выплюнуть браузеру, то можно так:

//кэш

$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 мин.

По логам некешированный только первый запрос.

Но все равно левый трафик есть.

Andreyka:
Хотите урезать исход? Прикрутите iptables/tc.

Таким образом у меня будет 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.

jkm:
Тот вариант рабочий нужно только чуть исправить одну строку.

RewriteCond %{REQUEST_FILENAME} !^/blog/.*\.html$


Заменить REQUEST_FILENAME на REQUEST_URI

RewriteCond %{REQUEST_URI} !^/blog/.*\.html$

Проверял на локальном сервере, все работает...

Замена приведет к тому, что не будут обрабатываться адреса вроде:

/blog/bla-bla-bla?query_string=some.html

:)

Всего: 2572