Не удается перезапустить nginx, ошибка bind() (98: адрес уже используется)
Я знаю, что эта тема существует в разных формах, но у меня проблемы с решением моей проблемы. Если я бегу service nginx restart
, nginx терпит неудачу со следующим журналом:
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2015/03/14 08:36:42 [emerg] 9400#0: still could not bind()
У меня только один конфиг загружается в sites-enabled
, Когда я бегу:
$ grep -slir "listen 80"
$ sites-available/default
Это показывает, что default
в конфиге есть 80 прослушиваний, но это не должно иметь значения, поскольку sites-enabled
,
$ ps ax -o pid,ppid,%cpu,vsz,wchan,command|egrep '(nginx|PID)'
PID PPID %CPU VSZ WCHAN COMMAND
9468 1 0.0 97188 sigsus nginx: master process /usr/sbin/nginx
9471 9468 0.0 97328 ep_pol nginx: worker process
9472 9468 0.0 97368 ep_pol nginx: worker process
9693 9641 0.0 9448 pipe_w egrep --color=auto (nginx|PID)
Вот netstat
показывая, какие порты используются:
$ netstat -tulpn
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1300/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 9468/nginx
tcp 0 0 0.0.0.0:2812 0.0.0.0:* LISTEN 5980/monit
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1174/mysqld
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 1155/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9468/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1113/sshd
tcp6 0 0 :::25 :::* LISTEN 1300/master
tcp6 0 0 :::9000 :::* LISTEN 9106/hhvm
tcp6 0 0 :::22 :::* LISTEN 1113/sshd
udp 0 0 127.0.0.1:11211 0.0.0.0:* 1155/memcached
И вот мой полный конфиг в sites-enabled
(единственный там):
server {
listen 443 ssl default_server;
limit_conn gulag 15;
server_name www.my-website.com;
access_log /home/my-website/logs/access.log;
error_log /home/my-website/logs/error.log info;
root /home/my-website/web;
index index.php index.html;
ssl_certificate /etc/nginx/ssl/my-website.com.chained.crt;
ssl_certificate_key /etc/nginx/ssl/my-website.com.key;
ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
include /etc/nginx/includes/my-website_redirects_https.inc;
include /etc/nginx/includes/file_cache.inc;
include /etc/nginx/includes/wordpress.inc;
}
server {
listen 80;
server_name my-website.com www.my-website.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
server_name my-website.com;
return 301 https://www.$server_name$request_uri;
}
server {
server_name
some-other-website1.com www.some-other-website1.com
some-other-website2.com www.some-other-website2.com
some-other-website3.com www.some-other-website3.com
some-other-website4.com www.some-other-website4.com
some-other-website5.com www.some-other-website5.com
rewrite ^(.*)$ https://www.my-website.com/some/page/ permanent;
}
server {
server_name
some-other-website6.com www.some-other-website6.com
some-other-website7.com www.some-other-website7.com
some-other-website8.com www.some-other-website8.com
rewrite ^(.*)$ https://www.my-website.com/some/other/page/ permanent;
}
server {
server_name subdomain.my-website.com;
rewrite ^(.*)$ https://some.otherwebsite.com/ permanent;
}
server {
server_name
some-other-website9.com www.some-other-website9.com
some-other-website10.com www.some-other-website10.com
some-other-website11.com www.some-other-website11.com
rewrite ^(.*)$ https://www.my-website.com/ permanent;
}
Мне интересно, если эта ошибка bind() происходит из-за моей конфигурации. Есть идеи, что я могу делать не так? Я использую nginx/1.4.6 (Ubuntu). Любая помощь будет принята с благодарностью.
5 ответов
Попробуйте остановить nginx:
service nginx stop
Проверьте, работает ли nginx:
ps ax | grep nginx
И если все еще работает, убить процесс:
kill -p PID
Проверьте статус nginx, не запустится:
ps ax | grep nginx
А затем сделайте чистый старт:
service nginx start
Это сработало для меня после того же вопроса.
У меня была похожая проблема.
Вот что сработало для меня: sudo fuser -k 80/tcp
затем: service nginx restart
Я не знаю причину, но мой ответ был найден здесь: https://easyengine.io/tutorials/nginx/troubleshooting/emerg-bind-failed-98-address-already-in-use/ Troubleshooting/emerg-bind-failed-98-address-already-in- use/
Кроме того, вот предыстория того, как / когда появилось это сообщение об ошибке: /questions/661574/konfliktuyuschee-imya-servera-nginx-dlya-subdomena/661585#661585
В соответствии с вашими netstat
вывод, сам nginx все еще работает на порту 80.
Прежде чем пытаться перезапустить его, проверьте свою конфигурацию с помощью nginx -t
и исправить ошибки.
Я, наверное, единственный, кто достаточно глуп, чтобы совершить эту ошибку, но я случайно скачал не тот пакет (php
вместо php-fpm
), который установил Apache 2 в качестве зависимости. Поскольку он работал на 80-м порту, Nginx не смог.
Вероятно, не очень распространенная ошибка, но я думаю, что вы должны проверить, есть ли у вас случайно что-нибудь еще на порту 80.
Во-первых, нам нужно проверить, сколько служб работает на порту 80. Чтобы проверить это, вы можете запустить следующую команду:
sudo netstat -plant | grep 80
Это покажет вам, какая именно служба прослушивает порт 80, а затем вы сможете принять решение, хотите ли вы использовать эту службу как есть или вместо нее использовать Nginx.
Если это Apache, вам нужно будет решить, хотите ли вы использовать Apache или Nginx.
Если вы хотите использовать только Nginx, вам нужно сначала остановить Apache:
sudo systemctl stop apache2 && sudo systemctl start nginx