Certbot: Could not bind TCP port 80 — порт занят веб-сервером
Certbot запущен с ключом --standalone и хочет сам занять порт 80, а там уже работает nginx. Останавливать сайт не нужно: используйте ключ --nginx, а для старого сертификата смените способ продления.
Содержание 9
Что сделать прямо сейчас
- Посмотрите, какая программа занимает порт 80, — шаг 1.
- Получите сертификат с ключом
--nginxвместо--standalone— шаг 2. - Если сертификат уже выдавался с
--standalone, переведите его продление на nginx — шаг 3.
Все команды на этой странице вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
Что значит это сообщение
После команды
sudo certbot certonly --standalone -d example.com -d www.example.comCertbot выводит:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for example.com and www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not bind TCP port 80 because it is already in use by another process on
this system (such as a web server). Please stop the program in question and then
try again.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(R)etry/(C)ancel: «Не удалось занять TCP-порт 80: его уже использует другая программа на этой машине — например, веб-сервер». С ключом --standalone Certbot для проверки домена сам запускает маленький веб-сервер на порту 80. Если там уже работает nginx, занять порт не получится.
Certbot спрашивает: R — попробовать ещё раз, C — отменить. Если ответить C, он повторит сообщение одной строкой и остановится.
Есть и второй вариант сообщения — Could not bind TCP port 80 because you don't have the appropriate permissions. Он значит, что Certbot запущен без прав администратора: добавьте sudo в начало команды.
Вместо example.com в примерах подставьте свой домен.
Шаг 1. Посмотрите, кто занял порт 80
sudo ss -ltnp | grep ':80 'В конце строки, в кавычках после users:, стоит имя программы. Если это nginx — переходите к шагу 2. Если там другая программа — например, apache2, — разбор на странице Address already in use.
Шаг 2. Получите сертификат через nginx
Нажмите C и Enter, чтобы отменить запуск. Затем выпустите сертификат через nginx: тогда Certbot не занимает порт сам, а на время проверки добавляет ответ в настройки nginx. Сначала проверьте на тестовом сервере Let’s Encrypt:
sudo certbot certonly --nginx --dry-run -d example.com -d www.example.comЕсли в конце строка The dry run was successful., выпустите сертификат и сразу пропишите его в nginx:
sudo certbot --nginx -d example.com -d www.example.comШаг 3. Переведите продление на nginx
Если сертификат когда-то получили с --standalone, а потом поставили nginx, с этой ошибкой будет останавливаться и продление по расписанию. Смените способ проверки для этого сертификата — вместо example.com подставьте имя сертификата из строки Certificate Name в ответе sudo certbot certificates:
sudo certbot reconfigure --cert-name example.com --nginxCertbot проверит новый способ на тестовом сервере и сохранит его. В конце будут строки Successfully updated configuration. и Changes will apply when the certificate renews. — новые настройки вступят в силу при следующем продлении.
Как проверить
Проверьте продление всех сертификатов на тестовом сервере:
sudo certbot renew --dry-runВ конце должна быть строка Congratulations, all simulated renewals succeeded: и список сертификатов с пометкой (success).
Похожие ошибки
| Сообщение | Чем отличается |
|---|---|
| bind() to 0.0.0.0:80 failed (98: Address already in use) | Наоборот: nginx не может занять порт 80 |
| Connection refused | Порт 80 никто не слушает — Let’s Encrypt не смог подключиться |
| Another instance of Certbot is already running | Заняты не порт, а папки Certbot |
Тексты сообщений сверены с исходным кодом Certbot 5.8.0 — эта версия ставится через snap, как в инструкции Бесплатный SSL-сертификат, — и сервера Let’s Encrypt. В Certbot 2.9.0 из пакетов Ubuntu 24.04 вместо Identifier: стоит Domain:, а некоторые строки могут немного отличаться.
Источники
- Исходный код Certbot 5.8.0: standalone.py — тексты Could not bind TCP port и вопрос Retry/Cancel.
- Исходный код Certbot 5.8.0: main.py — команда reconfigure и строка Successfully updated configuration.
Сверено 10 октября 2026 года.
Что почитать дальше
Проверено и обновлено: 10.10.2026