Я недавно столкнулся с проблемой после перехода на Cloudflare, и решение состоит в том, чтобы в основном остановить Cloudflare от кэширования 404 ответов.
В нашей многосерверной настройке с балансировкой нагрузки случаются случайные 404, но они быстро исправляются с помощью rsync (через lsyncd). До появления Cloudflare повторный запрос к файлу 404ed очень быстро становился бы 200, поскольку rsync выполняет свою работу.
Однако, поскольку Cloudflare кэширует все данные на основе заголовка кэширования, и ни apache, ни nginx не отправляют заголовок без кэширования в течение 404 с, Cloudflare на некоторое время заканчивает кэширование ответа 404.
Я искал решение, чтобы глобально добавить такой заголовок для 404s в apache и nginx (глобально, для всех размещенных доменов), но до сих пор оставалось пустым.
Кто-нибудь может помочь?
Спасибо.
источник
Ответы:
Разве вы не можете обойтись использованием директивы error_page, а затем обработать местоположение отдельно с добавленным заголовком?
например, в Nginx:
источник
listen
посколькуlocation
не поддерживается внутриhttp
напрямую. 2. Что еще более важно, ваш фрагмент на самом деле не работает, потому что add_header применяется только к 20X и 30X ( nginx.org/en/docs/http/ngx_http_headers_module.html ). Однако нам повезло, поскольку с недавно вышедшей версии 1.7.5 вы можете добавитьalways
модификатор, который будет применять его ко всем кодам ответов. Мне пришлось обновить nginx, но это был хороший удар в зад. Оно работает.root
работает. Если это будет удалено, это в значительной степени то, что я в итоге сделал для nginx.server
, они могут получить голосование.Вы также можете сделать это так:
источник
404 "no-cache"
но глупое ограничение минимального 6-символьного редактирования в stackexchange не позволяет мне это исправить. Понятно, что это не очень хорошее ограничение для сайта, посвященного кодированию и настройкам ...В Apache 2.4 вы можете попробовать что-то вроде:
Это
always
важно, потому что это:Вы сказали, что все 404-е, но для полной справки, конечно, может иметь смысл обернуть это в
<FilesMatch>
или<LocationMatch>
ограничить область.Я считаю, что это новая возможность в Apache 2.4, так как использование
expr
условных выражений отсутствует в версии 2.2 документации mod_headers.curl -I [foo]
тест без этого конфига:curl -I [foo]
проверить с этим конфигом:Источники:
http://httpd.apache.org/docs/current/mod/mod_headers.html
источник
мои пять центов по этому вопросу -
в нашем PHP-проекте у нас мало 404 страниц, поэтому я решил сделать это на уровне PHP с помощью функций header () PHP
источник