- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем привет!
Неделю промаялся с настройкой NGINX кеширования на своем сервере для DLE сайта. Вроде наконец все получилось, но теперь появилась задача с которой я никак не могу справиться. Подскажите, пожалуйста, кто разбирается.
Необходимо добавить правило-исключение для последних добавленных на сайт новостей (чтобы они не кешировались). Адреса страниц имеют структуру: http://site.ru/99999-nazvanie-novosti.html , нужно добавить в исключения все новости у которых id больше 9999 (т.е. содержит 5 цифр).
Вот сам конфиг:
Всячески пытался изменить вот эту вот строчку:
location ~ (admin.php|index.php?action=logout) {location ~ (admin.php|index.php?action=logout|[0-9]{5}) {
location ~ (admin.php|index.php?action=logout|[0-9]{5,}) {
location ~ (admin.php|index.php?action=logout|[0-9]{5}-.*\.html) {
Пробовал также добавлять такие строки в код:
location ~* [0-9]{5} {
error_page 412 = @fallback;
return 412;
}
Но по итогу либо ничего не меняется (в плане кеша), либо сервер вообще отказывается запускаться =(
Подскажите что не так? Как правильно добавить/сделать это исключение?
А какой в этом смысл? Хотите чтобы свежие новости быстрее индексировались? Ну так вы создали новость - зашли на страницу и она в кеше, что не так?
Нужно чтобы к новым новостям учитывались просмотры. Зачем - это другой вопрос, но это нужно сделать из-за некой специфики работы сайта.
---------- Добавлено 14.02.2017 в 16:00 ----------
Может быть в код PHP нужно добавить чего нибудь чтобы не срабатывало кеширование? (такой вариант был бы даже лучше, из-за большей гибкости фильтрации - на будущее)
Пробовал так:
if($row['id'] > 10100) {
header("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
}
И так:
if($row['id'] > 10100) {
session_cache_limiter('private');
}
Не помогает =(
Какую-то жуткую конструкцию вы наворотили с этим кэшем)
Теоретически вот это должно работать, если для админки работает исключение.
location ~ (admin.php|index.php?action=logout|[0-9]{5}) {
Я обычно кэширование прописываю гораздо проще. Что-то вроде такого:
Это удобней хотя бы просто потому, что можно подключить инклюдом на любое количество сайтов на серваке, c той же ISPmanager, например.
А как проверяете работу кэширования? Может дело не в конфигах, а в проверках?
Какую-то жуткую конструкцию вы наворотили с этим кэшем)
Собирал все по крупицам на разных просторах интернета, основную часть на хабре например. Но в целом, там в примерах конструкция была примерно такая.
Теоретически вот это должно работать, если для админки работает исключение.
В том то и дело что не работает =( Не помню точно, толи сервер не запускается с таким конфигом, толи кеширование не работает. Могу в принципе еще разок попробовать, но пробовал уже не раз и даже не два.
А как проверяете работу кэширования? Может дело не в конфигах, а в проверках?
Ну при залогиненом юзере, если делаю правки какие то в новостях, они при обновлении странички тут же применяются и отображаются. Если же делаю такие проверки под гостем, то изменений при обновлении не происходит.
Так вот, по логике, при добавлении такого исключения, при обновлении новостей с id>9999, все изменения должны отображаться сразу, даже для гостей. Но этого не происходит.
Я обычно кэширование прописываю гораздо проще. Что-то вроде такого:
Это удобней хотя бы просто потому, что можно подключить инклюдом на любое количество сайтов на серваке, c той же ISPmanager, например.
О, у меня как раз ISP. А что это за код? Полный конфиг для сайта или его часть?
---------- Добавлено 14.02.2017 в 22:11 ----------
Сейчас попробовал вот этот вариант еще раз:
location ~ (admin.php|index.php?action=logout|[0-9]{5}) {
По итогу сервер не включается с таким конфигом (все время 521 ошибка), пока не вернешь обратно. Точнее сервер включается и работает, и даже работают другие сайты размещенные на нем - но не тот сайт для которого написан этот конфиг.
Ну при залогиненом юзере, если делаю правки какие то в новостях, они при обновлении странички тут же применяются и отображаются. Если же делаю такие проверки под гостем, то изменений при обновлении не происходит.
Можно добавить заголовок статуса кэширования, с ним гораздо проще делать отладку:
после этого в заголовках страницы будет показывать:
А что это за код? Полный конфиг для сайта или его часть?
Это полный конфиг для добавления кэширования к любому сайту. Т.е если в контекст server его вставить или проинклудить - то должно нормально работать. Ну, зону поправить, если отличается. У меня она называется "one", у вас тоже.
Сейчас попробовал вот этот вариант еще раз:
location ~ (admin.php|index.php?action=logout|[0-9]{5}) {
Тут скорей всего дело в том, что регулярка без кавычек или скобок не работает. У меня uri проверяется через if, обычно работает
нормально. Попробуйте не в location ее дописать, а туда, где куки проверяете:
Что-то типа такого.
Попробуйте не в location ее дописать, а туда, где куки проверяете:
Что-то типа такого.
Так сработало! ) Спасибо Вам огромное! ))
Теперь буду мозговать как в будущем корректировать эту регулярку, когда количество не кешируемых новостей перевалит за тысячу..
UPD: А не, все довольно легко решается =)
Например такой регуляркой, 10[2-9][0-9]{2}
Так сработало! ) Спасибо Вам огромное! ))
Ну отлично, пожалуйста)
Но переписать конфиг на более простой и удобный всё же рекомендую.