Я знаю, что эта тема существует в разных формах, но у меня проблемы с решением моей проблемы. Если я запускаю 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). Любая помощь будет принята с благодарностью.
Ответы:
Попробуйте остановить nginx:
Проверьте, работает ли nginx:
И если все еще работает, убить процесс:
Проверьте статус nginx, не запустится:
А затем сделайте чистый старт:
Это сработало для меня после того же вопроса.
источник
Согласно вашему
netstat
выводу, сам nginx все еще работает на порту 80.Прежде чем пытаться перезапустить его, проверьте свою конфигурацию
nginx -t
и исправьте ошибки.источник
Я, наверное, единственный, кто достаточно глуп, чтобы совершить эту ошибку, но я случайно загрузил не тот пакет (
php
вместоphp-fpm
), который установил Apache 2 в качестве зависимости. Поскольку он работал на 80-м порту, Nginx не смог.Вероятно, не очень распространенная ошибка, но я думаю, что вы должны проверить, есть ли у вас случайно что-нибудь еще на порту 80.
источник
mod_php
вместо этого. Но теперь, когда так было в течение многих лет, его нельзя изменить, не нарушив систему каждого.apt-get remove apache2 && apt-get autoremove
)У меня была похожая проблема.
Вот что у меня сработало:
sudo fuser -k 80/tcp
then:
service nginx restart
Я не знаю причину, но мой ответ был найден здесь: https://easyengine.io/tutorials/nginx/trou устранение неисправностей/emerg-bind-failed-98-address-already-in- use/
Кроме того, вот предыстория того, как / когда появилось это сообщение об ошибке: https://serverfault.com/a/939888/399723
источник