突然间我得到了以下nginx错误
* Restarting nginx
* Stopping nginx nginx
...done.
* Starting nginx nginx
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
nginx: [emerg] still could not bind()
...done.
...done.
如果我跑
lsof -i :80 or sudo fuser -k 80/tcp
我一无所获。 80端口没有任何东西
然后我运行以下内容:
sudo netstat -pan | grep ":80"
tcp 0 0 127.0.0.1:8070 0.0.0.0:* LISTEN 15056/uwsgi
tcp 0 0 10.170.35.97:39567 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39564 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39584 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39566 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39571 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39580 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39562 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39582 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39586 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39575 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39579 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39560 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39587 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39591 10.158.58.13:8080 TIME_WAIT -
tcp 0 0 10.170.35.97:39589 10.158.58.13:8080 TIME_WAIT -
我很难过。
如何进行调试?
我正在使用带有
的uwsgi端口8070上的代理传递.uwsgi正在运行。 Nginx不是。我正在使用ubuntu 12.4
以下是我的nginx配置文件的相关部分
upstream uwsgi_frontend {
server 127.0.0.1:8070;
}
server {
listen 80;
server_name 127.0.0.1;
location = /favicon.ico {
log_not_found off;
}
location / {
include uwsgi_params;
uwsgi_buffering off;
uwsgi_pass 127.0.0.1:8070;
}
}
以下是我在ubuntu 12.04上安装nginx的方法
nginx=stable;add-apt-repository ppa:nginx/$nginx;
apt-get update
apt get install nginx-full
答案 0 :(得分:190)
[::]:80
是一个ipv6地址。
如果您的nginx配置正在侦听端口80以及端口[::]:80
,则可能会导致此错误。
我的默认网站可用文件中包含以下内容:
listen 80;
listen [::]:80 default_server;
您可以通过将ipv6only=on
添加到[::]:80
来解决此问题:
listen 80;
listen [::]:80 ipv6only=on default_server;
有关详细信息,请参阅:
答案 1 :(得分:188)
我通过运行sudo apachectl stop
修复此问题 - 结果是apache在后台运行并阻止nginx在所需的端口上启动。
在ubuntu上运行sudo /etc/init.d/apache2 stop
答案 2 :(得分:32)
我发现了以前从未遇到的问题。
我只需要删除/etc/nginx/sites-available/default
。然后它奏效了。
我的conf在/etc/nginx/default
。
答案 3 :(得分:27)
我的情况不同,我必须终止运行Nginx才能重新启动它。
代替
sudo systemctl restart nginx
我必须使用:
sudo pkill -f nginx
sudo systemctl start nginx
答案 4 :(得分:21)
我也遇到了同样的错误。
nginx:[emerg] bind()到[::]:80失败(98:地址已在使用中)
当我在浏览器中键入localhost时,我正在
有效!
这是此服务器的默认网页。
Web服务器软件正在运行但尚未添加任何内容。 而不是nginx欢迎页面,apache2正在同一个端口上运行,
找到apache2 ports.conf 文件
sudo /etc/apache2/ports.conf
更改80
以外的端口,我将其设为70
保存文件
重新启动系统
它也适用于您,如果您在浏览器中键入localhost,您将获得nginx欢迎页面
答案 5 :(得分:4)
尝试执行此命令
{{1}}
答案 6 :(得分:4)
我在letsencrypt(certbot)和nginx中遇到了同样的问题,
参考:https://github.com/certbot/certbot/issues/5486
此错误尚无解决方案
所以,更改了续订的cron(续订后重新加载)(使用来自certbot的建议)
-- in /etc/cron.d/certbot
from
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
to
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --pre-hook "service nginx stop" --post-hook "service nginx start"
日志(简称):
-- in /var/log/syslog
Jun 10 00:14:25 localhost systemd[1]: Starting Certbot...
Jun 10 00:14:38 localhost certbot[22222]: nginx: [error] open() "/run/nginx.pid$
Jun 10 00:14:41 localhost certbot[22222]: Hook command "nginx" returned error c$
Jun 10 00:14:41 localhost certbot[22222]: Error output from nginx:
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:443 $
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] bind() to 0.0.0.0:80 f$
Jun 10 00:14:41 localhost certbot[22222]: nginx: [emerg] still could not bind()
Jun 10 00:14:41 localhost systemd[1]: Started Certbot.
-- in /var/log/nginx/error.log
2018/06/10 00:14:27 [notice] 22233#22233: signal process started
2018/06/10 00:14:31 [notice] 22237#22237: signal process started
2018/06/10 00:14:33 [notice] 22240#22240: signal process started
2018/06/10 00:14:34 [notice] 22245#22245: signal process started
2018/06/10 00:14:38 [notice] 22255#22255: signal process started
2018/06/10 00:14:38 [error] 22255#22255: open() "/run/nginx.pid" failed (2: No $
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:443 failed (98: Addr$
2018/06/10 00:14:39 [emerg] 22261#22261: bind() to 0.0.0.0:80 failed (98: Addre$
2018/06/10 00:14:39 [emerg] 22261#22261: still could not bind()
答案 7 :(得分:2)
我通过运行解决了
sudo killall apache2
sudo fuser -k 443/tcp
终于
sudo service nginx start
答案 8 :(得分:2)
我的问题是我的监听指令重叠。我设法通过运行找出重叠的指令
grep -r listen /etc/nginx/*
两个文件在同一端口上监听:
/etc/nginx/conf.d/default.conf: listen 80;
/etc/nginx/sites-enabled/default.conf: listen 80;
答案 9 :(得分:1)
首先更改apache监听端口80到8080 /etc/apache2/ports.conf中的apache包括
Listen 1.2.3.4:80 to 1.2.3.4:8080
sudo service apache2 restart
或
sudo service httpd restart // in case of centos
然后将nginx添加为将侦听apache端口的反向代理服务器
server {
listen 1.2.3.4:80;
server_name some.com;
access_log /var/log/nginx/something-access.log;
location / {
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* ^.+\.(jpg|js|jpeg|png)$ {
root /usr/share/nginx/html/;
}
location /404.html {
root /usr/share/nginx/html/40x.html;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# put code for static content like js/css/images/fonts
}
更改后重新启动nginx服务器
sudo service nginx restart
现在所有流量都将由nginx服务器处理,并将所有动态请求发送到apache,静态conten由nginx服务器提供。
对于缓存等高级配置:
答案 10 :(得分:1)
我遇到了类似的问题。日志如下所示
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to 0.0.0.0:443 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: bind() to [::]:80 failed (98: Address already in use)
2018/10/31 12:54:20 [emerg] 128005#128005: still could not bind()
2018/10/31 12:54:23 [alert] 127997#127997: unlink() "/run/nginx.pid" failed (2: No such file or directory)
2018/10/31 22:40:48 [info] 36948#36948: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68
2018/10/31 22:50:40 [emerg] 37638#37638: duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/default:18
2018/10/31 22:51:33 [info] 37787#37787: Using 32768KiB of shared memory for push module in /etc/nginx/nginx.conf:68
最后一个[emerg]
显示duplicate listen options for [::]:80
,这意味着存在多个包含[::]:80
的nginx块文件。
我的解决方案是删除[::]:80
设置
P.S。您可能具有默认的阻止文件。我的建议是将此文件保留为端口80的默认服务器。并从其他阻止文件中删除[::]:80
答案 11 :(得分:1)
我知道这是旧的,但还要确保您的所有 docker 容器都没有在端口 80 上。那是我的问题。
答案 12 :(得分:1)
在我的情况下,Apache或Apache2或Nginx中的一项服务已经在运行,因此我无法启动其他服务。
答案 13 :(得分:0)
多个服务可以监听同一个端口。 此问题通常来自在同一台机器上混合使用 Apache 和 NGINX。
检查:
sudo netstat -plant | grep 80
停止 Apache 并重新启动 NGINX:
sudo systemctl stop apache2 && sudo systemctl restart nginx && sudo systemctl status nginx
答案 14 :(得分:0)
我在AWS Lightsail上遇到此错误,使用上面的最佳答案
来自
listen [::]:80;
到
listen [::]:80 ipv6only=on default_server;
,然后单击我的AWS账户内的“重新启动”按钮,我将主服务器Apache和Nginx作为代理。
答案 15 :(得分:0)
我有同样的问题,但是我看到Nginx监听了端口80:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9730/nginx
但是当我尝试重新启动它时,出现错误:
service nginx restart
Stopping nginx: [FAILED]
Starting nginx: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use)
nginx: [emerg] still could not bind()
我的问题是在配置文件中,我设置了PID文件,似乎系统无法正确捕获它:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
当我删除它时,它起作用了。
答案 16 :(得分:0)
我使用主管在Docker容器上并排运行Nginx和Gunicorn。
这是用于主管的配置:
[supervisord]
nodaemon=true
[program:gunicorn]
command = /project/start.sh
user = www-data
[program:nginx]
command=/usr/sbin/nginx
问题是我如何启动Ngnix:默认情况下,它在前台运行。这使得监督重试以运行另一个Nginx实例。
通过在命令行中添加-g 'daemon off;'
,Nginx停留在前台,主管停止尝试运行另一个实例。
答案 17 :(得分:0)
在我看来,罪魁祸首是一个包含以下内容的服务器块:
Array.concat
在Linux上,侦听特定IP(例如 listen 127.0.0.1:80;
listen [::1]:80 ipv6only=on;
server_name localhost;
)的套接字与侦听同一端口但侦听任何IP(即[::1]:80
)的套接字冲突。通常,nginx将通过在幕后使用单个套接字来透明地处理此问题。但是,在listen指令上显式指定[::]:80
(或某些其他选项)会迫使nginx(尝试)为其创建单独的套接字,从而导致ipv6only
错误。
由于Address already in use
始终是默认设置(自1.3.4起),因此解决方法只是从该指令中删除该选项,并确保在我的配置中没有其他地方使用ipv6only=on
。 / p>
答案 18 :(得分:0)
如果在尝试上述任何一种解决方案后问题仍然存在,请重新启动服务器一次。它对我有用:)
答案 19 :(得分:0)
继续关注@ lfender6445和@SAURABH答案-
我的问题还在于,在升级到Vagrant 2.2.2之后,来宾启动时Apache2作为Web服务器运行。过去,我只有nginx作为网络服务器。
将vasrant ssh放入框中,并在访客箱启动时运行以下命令以禁止Apache2启动:
sudo update-rc.d -f apache2 remove
退出ssh,无所适从,无所适从。问题解决了。
答案 20 :(得分:0)
我在我的网站中提供了几个来自不同NGINX配置文件的* .save文件(来自nano的紧急转储) - 可用的目录。一旦我删除了这些.save文件,NGINX就重启了。我认为这些是无害的,因为没有相应的符号链接,但我想我错了。