解决nginx emerg bind to 80 failed 98 Address alrea

本文详细介绍了在Ubuntu上安装Nginx时遇到的端口80冲突问题及其解决方案。通过修改Nginx配置文件,设置IPv6监听选项,避免了端口重复绑定的问题,实现了Nginx的正常启动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

首选是安装nginx,在./configure出错的情况下,查看错误的报告,如果是缺少一些必要的库,安装这些库,可能的有ssl pcre(这个库我是使用源码安装的,在线安装没有成功,提示看不到这个库)等 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 这个是这个库的连接。下载源码然后安装即可!

然后make

make install

如果使用的是源码安装,安装后的目录在/usr/local/nginx.其中有所有的东西,源码安装的启动方式:sbin/nginx,这个程序在/usr/local/nginx

如果是在线安装,安装后的缺省目录在/etc/init.d/nginx start

如果在安装过程在浏览器中查找尝试!!

在ubuntu10.04上面安装nginx,安装完成之后尝试启动nginx,使用命令:

sudo /etc/init .d /nginx start

结果提示错误:

hankcs@ubuntu:~$ sudo /etc/init .d /nginx start
[ sudo ] password for hankcs:
  * 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()

我看了一下端口占用情况,并且尝试杀了进程:

hankcs@ubuntu:~$ netstat -ntpl
(并非所有进程都能被检测到,所有非本用户的进程信息将不会显示,如果想看到所有信息,则必须切换到 root 用户)
激活Internet连接 (仅服务器)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID /Program name
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      -              
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -              
hankcs@ubuntu:~$ killall -9 nginx
nginx:没有发现操作

遇到这种问题我先用中文搜索了一下答案,发现大家都在装逼地说要杀nginx重复的进程。我试了下发现是扯淡,于是看了谷歌搜到的第一个英文页面,老外说是nginx先监听了ipv4的80端口之后又监听了ipv6的80端口,于是就重复占用了。更加坑人的是你去看了端口占用它又把80端口释放了,是不是很囧。

解决方案是编辑nginx的配置文件

hankcs@ubuntu:~$ sudo gedit /etc/nginx/sites-available/default

修改这一段:

listen 80;
listen [::]:80 default_server;

listen 80;
listen [::]:80 ipv6only=on default_server;

然后启动nginx,完美解决!

还有一种可能的情况就是,如果你是在虚拟机中安装了nginx,那么在虚拟机中的firefox可能就是不能连接,但是在宿主机中的浏览器可以连接(前提是宿主机和虚拟机是可以相通的!!!)

           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
### Nginx 绑定端口 80 失败的原因分析与解决方案 当遇到错误信息 `nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)` 时,通常表示另一个进程已经占用了该端口。以下是详细的排查和解决问题的方法。 #### 1. **确认端口占用情况** 为了查明哪些进程正在使用端口 80,可以按照以下步骤操作: ##### 方法一:使用 `netstat` 或 `ss` 命令 在 Linux 系统中,可以通过以下命令来查找占用端口 80 的进程: ```bash sudo netstat -tulnp | grep :80 ``` 或者更高效的方式是使用 `ss` 命令: ```bash sudo ss -tulwnp | grep :80 ``` 这些命令会显示当前监听端口 80 的进程及其 PID(进程 ID),例如输出可能是这样的: ``` tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/httpd ``` 这表明 PID 为 1234 的 `httpd` 进程正占用着端口 80[^1]。 #### 2. **停止冲突的进程** 一旦确定了哪个进程占用了端口 80,则需要决定是否终止它或将它的配置调整到其他未使用的端口上。 ##### 方法二:杀死占用端口的进程 如果发现确实存在不必要的服务占据了此端口,可以直接将其关闭。例如,从前面的结果得知 PID 是 1234,那么可以用以下命令结束这个进程: ```bash kill -9 1234 ``` 注意替换实际的 PID 数字进去即可。 另外一种常见的情况就是之前启动过 Nginx 自身却没有完全退出干净,此时可以根据之前的描述先尝试重启服务再做判断: ```bash sudo systemctl stop nginx ps aux | grep nginx ``` 如果有残留实例的话,同样采取强制杀掉措施后再重新加载新的配置文件并开启服务: ```bash sudo killall -9 nginx sudo systemctl start nginx ``` #### 3. **修改 Nginx 配置以避开冲突** 如果无法更改现有应用的工作端口而必须让 Nginx 改变默认设置的话,就需要编辑 `/etc/nginx/nginx.conf` 文件中的 listen 参数改为非标准值比如 8080 等,并确保防火墙规则允许新设定范围内的流量通行之后再次激活站点功能测试效果如何正常运作起来。 #### 4. **验证修复成果** 最后一步总是必不可少的就是检验刚才所做的改动有没有生效以及整个环境能否稳定运行下去。打开浏览器输入 http://yourserveripaddress:chosenportnumber 来观察页面响应状况从而得出结论说问题已彻底解决还是依旧存在问题待进一步探讨处理办法。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值