Содержание vBulletin не обновляется - mod_expires/Apache?
Извините за действительно длинный вопрос. Я некоторое время устранял это и решил поделиться всем.
Я использую vBulletin 5.1.5 (не беспокойтесь об этом), и я пытаюсь выяснить, связана ли проблема с программным обеспечением vBulletin или с проблемой Apache.
Система: vBulletin 5.1.5, Apache 2.4.7, mod_expires, memcached
Эта проблема возникает независимо от локального браузера (Chrome и Firefox оба делают это).
Я только что сделал обновление с vBulletin 5.1.4 до 5.1.5, и эта проблема стала возникать сразу после. vBulletin говорит, что это проблема сервера Apache и что они будут только устанавливать содержимое / заголовки как no-cache или оставят это в покое.
Если кто-то публикует ответ в теме, а затем возвращается на главную страницу форума, новый ответ не отображается как последний (в теме по-прежнему отображается 0 ответов). Если они затем вернутся в ветку, ответ не появится, пока они не обновят страницу.
Мы очистили системный кеш vBulletin, удалили все куки для домена и очистили локальный кеш.
Через инструменты разработчика Chrome (вкладка "Сеть") я вижу следующее:
Когда страница была обновлена, не должен ли vBulletin сбрасывать дату: в заголовке HTTP?
Я делаю оригинальный пост в 15:12:05 UTC. Я делаю ответ сразу после в 15:12:10 UTC. Заголовок HTTP страницы по-прежнему показывает дату: как 15:12:05 UTC. Я покидаю страницу и захожу на главную страницу форума, затем возвращаюсь к посту. Он все еще показывает дату заголовка HTTP: как 15:12:05 UTC, пока я не обновлю его. Итак... клиенту не сообщают, что на странице есть обновление. Это установлено vBulletin, не так ли? Так как страницы создаются динамически?
Я включил отладку в конфигурационном файле и посмотрел метки времени ((генерируется BY vbulletin внизу каждой отображаемой страницы):
Начальное сообщение - Текущее время: ср, 04 фев 2015 11:31:39 -0500 После комментария - Текущее время: ср, 04 фев 2015 11:31:39 -0500 Нажмите на ссылку на форуме - Текущее время: ср, 04 фев 2015 11:31:03 -0500 Обновление попаданий - текущее время: ср, 04 фев 2015 11:33:12 -0500 Снова нажмите на тему - текущее время: ср, 04 фев 2015 11:31:39 -0500 Обновление кликов - текущее время: Ср, 04 фев 2015 11:35:15 -0500
Обратите внимание, что когда я нажимаю на ссылку на форуме, я возвращаюсь назад во времени (хотя я сделал новое сообщение). Я освежаюсь, мы возвращаемся в текущее время.
Затем, когда я снова нажимаю на эту тему, отметка времени соответствует начальному времени публикации, а НЕ времени после того, как я сделал комментарий. Еще раз, я обновляюсь, и мы возвращаемся к текущему времени, и ответ показывает.
Глядя на логи:
- Я нажимаю на новую тему GET /forums/new-content/44 HTTP/1.1
- Я делаю пост POST /forums/create-content/text/ HTTP/1.1
- Страница обновляется GET /forums/forum/general/test-forum/28305-this-is-another-new-topic
- Я добавляю ответ POST /forums/create-content/text/ HTTP/1.1
- Ответ показывает POST /forums/create-content/loadnode HTTP/1.1
- Я захожу на родительский форум с постом GET /forums/forum/general/test-forum HTTP/1.1
- Я нажимаю на сообщение, отображение страницы и HTTP / 1.1 POST /forums/ajax/api/node/incrementNodeview, а затем GET /forums/foru...-another-testt HTTP/1.1
Все имеет код состояния 200. Пункты 6 и 7 имеют Cache-Control: max-age=3600 и дату и время исходного сообщения.
Возможно я не уверен относительно того, как истечение работает между сервером и клиентом? Разве процесс от клиента к серверу не должен быть чем-то вроде... свернуть оригинальную страницу и кэшировать ее локально. Запросите ту же страницу позже, отправьте запрос на сервер для заголовка, чтобы увидеть, есть ли у страницы новое время, если они совпадают, затем потяните локальную копию, если они не совпадают, отправьте новую копию. Apache не знает, была ли страница обновлена или нет - это сгенерировано vBulletin, верно?
Какие-нибудь мысли?
1 ответ
Оказывается, это проблема с каталогом /forums (в корневом каталоге), унаследовавшим директивы.htaccess из родительского каталога (/). Есть ряд директив expires, которые там слушали. Теперь... чтобы выяснить, как игнорировать файл.htaccess из родительского каталога...