1. 复现错误
今天早晨到公司,打开测试环境的登录网页,如下图所示:
输入用户名和密码,点击login
,一直无法登录。
于是,打开控制台,却发现报出如下错误:
于是,登录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
。
3. 解决错误
由于端口占用导致该错误,可以杀死占用的端口,或者重启nginx
。
3.1 解决方法1
- 查看
nginx
ps -ef|grep nginx
- 杀死进程
kill -9 pid
或者
kill pid
kill -9 pid
和kill pid
的区别,可以参考博文:kill -9 和 kill 的区别
3.2 解决方法2
- 进入
nginx
的sbin
目录
cd /usr/local/sbin
- 停止
nginx
sudo ./nginx -s stop
- 启动
nginx
./nginx
4. 解决该错误的其他方法
如果我上述解决错误的方法,无法解决你的问题,可以参考如下解决方法。
- 通过防火墙开放对外端口。
如果服务器上没有iptables
服务,需要安装iptables
服务。如果有,则跳过。
yum install iptables-services
systemctl mask firewalld.service
systemctl enable iptables.service
systemctl enable ip6tables.service
- 配置端口
进入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
命令,保存退出文件编辑。
- 重启防火墙
systemctl restart iptables.service
- 查看
80
端口被占用的进程
lsof -i:80
- 通过
kill
命令干掉该进程
kill -9 进程号
- 启动
nginx
这个时候在启动nginx,一切正常了!
/usr/local/nginx/sbin/nginx