Назад | Перейти на главную страницу

Почему nginx не дожидается моего соединения во время корректного завершения работы?

У меня есть веб-сервер nginx, на котором я выполняю nginx -s quit. Предполагается, что это будет плавное завершение работы, поэтому предполагается, что он должен дождаться завершения всех подключений перед завершением работы.

Чтобы убедиться, что все работает так, как заявлено, я выполняю curl для файла размером 10 МБ, обслуживаемого nginx, с помощью --rate-limit=1024K (в секунду), давая мне 10 секунд на выполнение nginx -s quit до завершения загрузки. Я ожидал, что nginx завершит загрузку, а затем выключится, но каждый раз, когда я делаю это в начале загрузки, nginx все равно завершает работу и curl говорит:

curl: (18) transfer closed with 2019456 bytes remaining to read

Зачем вообще Nginx выключился? Мне не удалось найти документацию, в которой говорится: «Nginx ожидает завершения всех подключений. Кроме... "Моя единственная теория состоит в том, что с ограничением скорости curl так долго ждет между отправкой пакетов, что nginx думает, что соединение устарело ... или что-то в этом роде.

Что я делаю не так или недопонимаю?

РЕДАКТИРОВАТЬ:

Я провел такой же тест на своем локальном компьютере, и все работало правильно, так что это больше не вопрос nginx. Среда, в которой сигнал работает некорректно, принадлежит Google. Кубернеты диспетчер кластеров контейнеров, где запущен nginx. В nginx -s quit выполняется как предварительная остановка, но также не работает, когда я выполняю команду в контейнере докера и запускаю команду выхода в командной строке во время загрузки. Примечание: мой успешный тест на локальной машине был проведен с nginx, работающим внутри контейнера докеров, поэтому это НЕ докер.

Единственная очевидная вещь, о которой я могу думать, это то, что nginx имеет PID 1 внутри контейнера, но не на вашем рабочем столе. Здесь нет ничего особенного для кубернетов - в этом отношении это просто Docker.

Я пытался воспроизвести это, но у меня это сработало правильно. Вот стручок, который я использовал:

apiVersion: v1 kind: Pod metadata: namespace: demos name: pods-demo labels: demo: pods spec: containers: - name: busybox image: busybox command: - sh - -c - dd if=/dev/zero of=/data/index.html bs=1024 count=10240; sleep 1000000 volumeMounts: - name: content mountPath: /data - name: nginx image: nginx volumeMounts: - name: content mountPath: /usr/share/nginx/html readOnly: true volumes: - name: content