解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)以及nginx 502 Bad Gateway解决方法
  TEZNKK3IfmPf 2023年11月12日 16 0

1. 复现错误


今天早晨到公司,打开测试环境的登录网页,如下图所示:

解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)以及nginx 502 Bad Gateway解决方法

输入用户名和密码,点击login,一直无法登录。

于是,打开控制台,却发现报出如下错误:

解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)以及nginx 502 Bad Gateway解决方法

于是,登录nginx所在的服务器,使用如下命令,找到nginx的安装目录:

[root@test local] which nginx
/usr/local/nginx/sbin/nginx

sbin目录下,使用./nginx命令,启动nginx,却报出如下错误:

nginx: [emerg] bind() to 0.0.0.0:80 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:80 failed (98: Address already in use)
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

[emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

2. 分析错误


申请的文心一言的账号审核通过,可以借助文心一言帮助我分析错误,如下图所示:

解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)以及nginx 502 Bad Gateway解决方法

文心一言告诉我,端口被占用,建议我使用其他端口。

但我不接受它的建议,既然是端口占用,我们可以杀死占用的端口或者重启nginx

3. 解决错误


由于端口占用导致该错误,可以杀死占用的端口,或者重启nginx

3.1 解决方法1

  1. 查看nginx
ps -ef|grep nginx
  1. 杀死进程
kill -9 pid 

或者

kill pid

kill -9 pidkill pid的区别,可以参考博文:kill -9 和 kill 的区别

3.2 解决方法2

  1. 进入nginxsbin目录
cd /usr/local/sbin
  1. 停止nginx
sudo ./nginx -s stop
  1. 启动nginx
./nginx

4. 解决该错误的其他方法


如果我上述解决错误的方法,无法解决你的问题,可以参考如下解决方法。

  1. 通过防火墙开放对外端口。

如果服务器上没有iptables服务,需要安装iptables服务。如果有,则跳过。

yum install iptables-services
systemctl mask firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
  1. 配置端口

进入iptables配置80端口,因为nginx默认是由80端口访问

vi /etc/sysconfig/iptables

打开后,默认的配置信息如下(加粗部分为新添加的):

INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [6:696]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

A INPUT -p tcp -m state --state NEW -m tcp --dport 30000:30999 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

后续需要开放其它端口,也是在此文件中添加修改即可!

修改完后,使用:wq命令,保存退出文件编辑。

  1. 重启防火墙
systemctl restart iptables.service
  1. 查看80端口被占用的进程
lsof -i:80
  1. 通过kill命令干掉该进程
kill -9 进程号
  1. 启动nginx

这个时候在启动nginx,一切正常了!

/usr/local/nginx/sbin/nginx
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   28   0   0 nginxpasswd
  TEZNKK3IfmPf   2024年05月31日   52   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   31   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   34   0   0 nginxpasswd
  TEZNKK3IfmPf   2024年05月31日   29   0   0 linuxbind
  TEZNKK3IfmPf   2024年05月31日   40   0   0 linuxshell
TEZNKK3IfmPf