LINUX.ORG.RU
ФорумAdmin

Nginx + memcached в кеш попадают сломанные ссылки

 , , ,


0

1

Прошу помощи экспертного сообщества, так как мои усилия зашли в тупик.

В наличии три сервера с распределёнными ролями:
Первый — шлюз, на нём почтовый сервер и DNS зона (первичная) на bind9 + nginx фронтенд в качестве кеширующего прокси и балансировщика.
Второй — nginx бакенд, на нём крутятся сами виртуальные хосты + memcached + redis
Третий — сервер с базами данных MySQL и PostgreSQL

Проблема заключается в том, что пару-тройку раз в неделю (иногда бывает чаще) в кеше memcached на втором сервере (бакенд) появляются страницы сайта на которых ссылки имеют IP адрес в url вместо имени домена. Проблема решается перезапуском memcached.

Причину и момент когда ссылки сайта ломаются я так и не смог отловить. То что это не проблема binda я уверен, он работает правильно. Так же не думаю, что это проблема nginxa, там тоже уже давно всё нормально работает. Есть подозрение на CMS, у меня сайт на joomla 3.10.

Уважаемые коллеги, кто нибудь сталкивался с подобным поведением? Если будут нужны конфиги, покажу.

Спасибо заранее за помощь

★★

Кто в качестве DNS-а указан на сервере 2? Если не сервер 1, тогда указать его. Если сервер 1 - включить на нём querylog(осторожно, будет много логов, если клиентов много) и сверить их в момент проблем(доходят ли запросы с сервера 2 или нет).

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

На бакенде (сервер 2) dns-ом указан шлюз (сервер 1). Кьюрилогом уже воспользовался, запросы доходят и даже ответ от dns на бакенд нормально прилетает. Это первое что я проверил

Vint ★★ ()

Есть подозрение на CMS, у меня сайт на joomla 3.10.

Разумное предположение, учитывая что страницы (и ссылки) генерирует именно CMS. Разбирайся как она это делает, откуда бёрет домен для ссылок

MrClon ★★★★★ ()

Скорее всего проблема в том, что днс в какой то момент перестает ресолвить адреса. Проверь обратную зону.

А еще лучше, добавь в /etc/hosts там где memcached и убедись, что в /etc/resolv.conf у него приоритет.

AVL ()
Последнее исправление: AVL (всего исправлений: 1)
Ответ на: комментарий от AVL

Всё что касается настройки зон я проверил в первую очередь, там всё в порядке.
В /etc/hosts бакенда запись о внешнем домене есть. А приоритет наверное устанавливается в /etc/host.conf, а не в resolv.conf, что тоже уже установлено (order hosts,bind). Или я вас неправильно понял?

Vint ★★ ()
Ответ на: комментарий от Vint

Есть ещё одно подозрение. На запросы по локальной зоне у меня отвечает dnsmasq (он же и адреса в локалке раздаёт по DHCP), а запросы по внешним доменам dnsmasq форвардит публичным dns-серверам. Так вот я заметил, что в последние полгода примерно, после очередного обновления dnsmasqa, при запросе адреса из браузера с машины в локалке dnsmasq иногда затупливает и браузер вываливает ошибку DNS. Но спустя 10-15 секунд можно обновить страницу и всё будет работать. Такое поведение с любой машины в локалке, которая прогоняет dns-запрос через dnsmasq. Если на машине в локалке выставить в качестве DNS серверов публичные, а не шлюз, то все симптомы пропадают.

Ни у кого такого не было?

dnsmasq у меня на первом сервере стоит (на шлюзе)

Vint ★★ ()
Последнее исправление: Vint (всего исправлений: 1)
Ответ на: комментарий от Vint

а запросы по внешним доменам dnsmasq форвардит публичным dns-серверам.

1. В момент «не работает» не смотрели tcpdump-ом ?
2. Кто публичные сервера? Может с ними, что-то не так?
3. Использование публичных принципиально или просто так получилось? Если второе, то что-то мешает бинд поднять?
ЗЫ И ещё по поводу «публичных». Где-то читал на уровне ОБС, типа пров заворачивал запросы ко всяким 8.8.8.8 &etc на себя в целях обеспечения работы блокировок.

anc ★★★★★ ()
Ответ на: комментарий от anc

1. В момент «не работает» не смотрели tcpdump-ом ?
2. Кто публичные сервера? Может с ними, что-то не так?
3. Использование публичных принципиально или просто так получилось? Если второе, то что-то мешает бинд поднять?
ЗЫ И ещё по поводу «публичных». Где-то читал на уровне ОБС, типа пров заворачивал запросы ко всяким 8.8.8.8 &etc на себя в целях обеспечения работы блокировок.

1. Ещё не смотрел, запускал мониторинг логфайла в реальном времени и делал запрос из браузера с машины из локалки. Затуп происходит на этапе ответа от публичного сервера. То есть запрос улетает а вот ответ приходит с сильной задержкой.
2. 8.8.8.8; 8.8.4.4; 1.1.1.1; etc.
3. Не принципиально, прововские работают точно так же (по скорости и блокировкам). Bind у меня поднят и он обслуживает белую зону, у меня висит первичная, вторичка у nic.ru. Можно конечно и локальную зону на binda повесить, но dnsmasq для локалки мне больше подходит да и DHCP отдельно не надо поднимать, всё в одном стакане.

Провайдер Ростелеком, вангую скорее всего так это у них и происходит. Может кстати на этом повороте и есть затуп. Попробую только провоские DNS оставить.

Vint ★★ ()
Последнее исправление: Vint (всего исправлений: 2)
Ответ на: комментарий от Vint

Можно конечно и локальную зону на binda повесить, но dnsmasq для локалки мне больше подходит

Их можно на разные адреса повесить. Приведу пример моей домашней локалки. Бинд держит мои зоны и смотрит наружу. Dnsmasq работает на локалку и использует dns провов. Так сложилось исторически потому что у провов были внутренние ресурсы и для резолва требовался их днс.

anc ★★★★★ ()
Ответ на: комментарий от anc

Ну так у меня точно так же всё и выглядит. Bind снаружи, Dnsmasq внутри.

У меня Ростелеком Краснодарский. Заменил сейчас их DNS сервера на яндексовские, так как РТ Краснодар безбожно тормозные. Посмотрим как будут себя вести.

ЗЫ РТ реально с сентября 2021 года блокирует google и cloudflare сервера dns. Утырки!

Vint ★★ ()
Ответ на: комментарий от Vint

Я вот про это

Ну так у меня точно так же всё и выглядит. Bind снаружи

...

Заменил сейчас их DNS сервера на яндексовские

anc ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.