У меня есть веб-сервер 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