"Процесс CGI", о котором вы говорите, - это программа CGI. CGI-программа может быть скриптом на любом языке или скомпилированным исполняемым файлом.
Детали того, как операционная система фактически выполняет код программы CGI (ваши шаги 2, 3, 4 и 5), на самом деле не нужны для понимания того, как работает CGI.
Вот как я думаю об этом (Ваши шаги 2-5 сжаты в шаг 2 здесь):
Большинство деталей, которые вы обсуждали в шагах 2-5, описаны на странице execve
man (в Linux содержит примеры рабочего кода): man 2 execve
. Вы также можете посмотреть на fork
. Это отходит от темы CGI и переходит к теме модели процессов Unix. Лучше задать этот вопрос позже.
Точное и подробное описание CGI можно найти в интернет-проекте спецификации:
The WWW Common Gateway Interface Version 1.1
Похоже, у вас есть случайный символ в одном из файлов nginx, который certbot не может прочитать. Возможно, кодировка символов в файле не соответствует символам, введенным в документ. Или поврежденный файл nginx.
Проверьте все файлы виртуального сервера, перечисленные в /etc/nginx/conf.d/
. Re -создайте каждый файл в текстовом редакторе и сохраните файлы в используемой/предполагаемой кодировке.
Когда я в последний раз сталкивался с этим, это была ошибка с не -ASCII-символом в конфигурации nginx по умолчанию, которую LetsEncrypt пытается прочитать, чтобы добавить свою собственную конфигурацию. Следующая команда была полезна для поиска всех символов, отличных от -ASCII. (требует GNU grep
для-P
):
grep -Rn --color='auto' -P "[\x80-\xFF]" /etc/nginx
В частности, обратите внимание на /etc/nginx/sites -enable/default. В системе, которую я только что проверил, это комментарий к строке 29, начинающийся с # ssl_protocols
, и эта строка содержит не -символы ASCII (, что должно быть апострофом в «не» в этой строке ). ], который душит установку LetsEncrypt.
Вы можете либо удалить эти символы из этого файла, либо отключить конфигурацию по умолчанию. Если его нет в основной конфигурации nginx, у LetsEncrypt больше не должно быть этой ошибки.