У нас есть Debian 9.4 с запущенным nginx 1.10.3. Поле предназначено для перенаправления файлов и ресурсов, чтобы отдел маркетинга мог предоставлять ссылки в своих материалах, где базовое содержимое может указывать на другой актив, если документ обновлен. Таким образом, клиенты всегда будут обращаться к правильной версии для справки.
Несмотря на то, что мы сделали его как можно более простым, мы наблюдаем странное поведение, похожее на кеширование. Мы можем изменить то, на что указывает перенаправление, но оно продолжает разрешаться к старой версии.
Для справки, вот конфигурация нашего сайта:
server {
listen 80;
server_name files.oursite.com;
index index.html;
error_page 404 http://files.oursite.com/error.html;
location / {
try_files $uri $redirect;
}
location @redirect {
include /home/fileserve/redirect.conf;
}
Внутри redirect.conf появится следующее:
rewrite /foo http://files.oursite.com/foo.pdf redirect;
Это сработает. но если мы обновим его до этого:
rewrite /foo http://files.oursite.com/bar.pdf redirect;
foo.pdf все еще появляется.
Ответ заголовка от nginx показывает, что он все еще обслуживает foo.pdf, и я пробовал его с нескольких машин, браузеров и сетевых подключений, чтобы убедиться, что он не кэшируется ни при каких локальных обстоятельствах. Это также после того, как я переключился на 302 с 301, потому что мы НЕ хотим локального кеширования.
Кто-нибудь знает, что происходит, и как это решить? Спасибо!
Изменить: добавление устранения неполадок по запросу:
nginx -t синтаксис в порядке, проверка прошла успешно. nginx -T показывает загрузку с перенаправлением (/ foo должен перенаправлять на /bar.pdf) curl следующим образом:
curl -i http://files.oursite.com/foo:
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 25 Jan 2019 18:18:36 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://files.oursite.com/bar.pdf
curl -I выводит непосредственно в файлы, согласно @Richard Smith:
для старого файла (foo.pdf):
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 25 Jan 2019 18:39:12 GMT
Content-Type: application/pdf
Content-Length: 980444
Last-Modified: Tue, 20 Nov 2018 18:10:25 GMT
Connection: keep-alive
ETag: "5bf44e11-ef5dc"
Accept-Ranges: bytes
для нового файла (bar.pdf):
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 25 Jan 2019 18:39:45 GMT
Content-Type: application/pdf
Content-Length: 5948805
Last-Modified: Thu, 24 Jan 2019 23:23:50 GMT
Connection: keep-alive
ETag: "5c4a4906-5ac585"
Accept-Ranges: bytes
Curl -I после добавления истекает -1;
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 25 Jan 2019 20:42:59 GMT
Content-Type: text/html
Content-Length: 154
Connection: keep-alive
Location: http://files.oursite.com/foo.pdf
Expires: Fri, 25 Jan 2019 20:42:58 GMT
Cache-Control: no-cache
Самая сложная часть всего этого - не забыть стереть мои URL-адреса :)
Думаю, я понял ответ, но кто-то может захотеть прояснить, почему это происходит.
В моем файле перенаправления на самом деле есть следующее:
rewrite /foo http://files.oursite.com/foo.pdf redirect;
rewrite /foo-EXAMPLE http://files.oursite.com/foo-EXAMPLE.pdf redirect;
По какой-то причине при вводе / foo-EXAMPLE всегда выполняется перенаправление для / foo. Это объясняет, почему независимо от того, какие изменения я вношу в / foo-EXAMPLE, он выбирает /foo.pdf. Если я удалю / foo из файла перенаправления, / foo-EXAMPLE будет работать правильно.
Также кажется, что -EXAMPLE может быть добавлен к любому URL-адресу, и он все равно получит / foo. Понятия не имею почему.