Рейтинг:0

Nginx возвращает 200 вместо 206

флаг cn

У меня есть настройка сервера Nginx (openresty) с большими файлами. Когда клиенту нужен файл диапазона, Nginx отправляет обратно 200 вместо 206.

Это пример моего теста на завиток:

curl -v -I -r 0- -X ПОЛУЧИТЬ http://172.29.22.11/myBigFile.bin
* Попытка 172.29.22.11:80...
* Установлен TCP_NODELAY
* Подключено к 172.29.22.11 (172.29.22.11) порту 80 (#0)
> ПОЛУЧИТЬ /myBigFile.bin HTTP/1.1
> Хост: 172.29.22.11
> Диапазон: байты=0-
> Пользовательский агент: curl/7.68.0
> Принять: */*
> 
* Отметить пакет как не поддерживающий многоразовое использование
< HTTP/1.1 200 ОК
HTTP/1.1 200 ОК
< Transfer-Encoding: фрагментировано
Передача-кодирование: по частям
< Соединение: поддержание активности
Соединение: Keep-alive
< Истекает: ср, 21 декабря 2022 г., 09:10:00 по Гринвичу
Истекает: ср, 21 декабря 2022 г., 09:10:00 по Гринвичу.
<Кэш-контроль: max-age=31536000
Кэш-контроль: max-age=31536000
< Access-Control-Allow-Headers: *
Заголовки Access-Control-Allow: *
<Доступ-Контроль-Разрешить-Происхождение: *
Доступ-Контроль-Разрешить-Происхождение: *
< myCacheStatus: HIT
myCacheStatus: HIT
< Прагма: общедоступная
Прагма: общедоступная
<Кэш-Контроль: общедоступный
Кэш-Контроль: общедоступный
 
< 
* Обнаружено превышение: превышение = 448 url =/myBigFile.bin A (тело нулевой длины)
* Соединение №0 с хостом 172.29.22.11 осталось нетронутым

Как я могу определить, чтобы Nginx возвращал правильное значение 206?

----- Добавляю свою конфигурацию -----

        место расположения / {
            внутренний;
            
            прокси_кэш мой_кэш;
        
            proxy_cache_key $uri;

            # установить время проверки для 200 респинов -> до 7 дней
            proxy_cache_valid 200 7 дней;

            # Очистить флаги, которые я не хочу
            more_clear_headers 'Access-Control-Allow-Headers';
            more_clear_headers 'Access-Control-Allow-Origin';
            more_clear_headers 'доступ*';
            more_clear_headers 'расположение содержимого';
            more_clear_headers 'Дата';
            more_clear_headers 'x-proxy-cache';
            more_clear_headers 'Сервер';

            # добавить заголовки для обработки CORS
            add_header Access-Control-Allow-Headers '*';
            add_header Access-Control-Allow-Origin '*';

            # для уменьшения пропускной способности я использую сжатие
            gzip включен;

            # настраиваем прокси и даем ему команду считывать, даже если нет Cache-Control
            proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
            proxy_cache_lock включен;
            proxy_cache_lock_timeout 0 с;
            proxy_cache_lock_age 200 с;
            обновление proxy_cache_use_stale;


            # запустить обратный прокси
            прокси_пароль http://0.0.0.0:3000;

            # установить локальное хранение на стороне клиента в настоящее время мы начнем через 365 дней
            истекает через 365 дней;
            add_header Публичный прагма;
            add_header Cache-Control "public";

        }
флаг in
Это должно быть значение по умолчанию. Пожалуйста, покажите вашу конфигурацию.
флаг jp
Возможный дубликат https://serverfault.com/questions/965209/multipart-ranges-in-nginx-reverse-proxy
Meir avatar
флаг cn
@GeraldSchneider Я добавил конфигурацию
Meir avatar
флаг cn
@AlexD Ответы были плохими (используйте лак / не кэшируйте эти запросы)
флаг in
Таким образом, nginx действует только как обратный прокси. Это означает, что проблема, скорее всего, в вашем внутреннем сервере, а не в nginx.
Meir avatar
флаг cn
@GeraldSchneider, как добавить в nginX функцию возврата 206, когда файл уже кэширован? и как я могу это сделать, даже если внутренний сервер этого не поддерживает?
Meir avatar
флаг cn
Мне кажется странным, что по этой причине я должен перейти на лак
djdomi avatar
флаг za
вы можете не использовать принудительное кэширование на nginx. однако, если ваш сервис прослушивается на 0.0.0.0, он напрямую доступен из Интернета, обычно вы используете 127.0.0.1 вместо 0.0.0.0

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.