一、占用80端口原因

Web服务器的默认端口是80,当运行在80端口上的Web服务器启动时,如果该端口已经被占用,该服务器将无法正常工作。这时就需要排查出80端口被占用的原因。

1、其它程序占用:有些程序会占用80端口,如Skype、QQ等IM软件,这些软件需要通过网络通信进行数据传输,因此它们会尝试占用一些默认端口。

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('localhost', 80))
if result == 0:
    print("Port 80 is open")
else:
    print("Port 80 is not open")
s.close()

2、防火墙拦截:系统默认配置下,防火墙会拦截所有80端口的流量。如果系统管理员没有设置防火墙规则来允许该端口的流量,那么80端口会被视为一种未知端口,被拦截。

sudo ufw allow from any to any port 80 proto tcp

3、Web服务器启动失败:有时是因为Web服务器启动失败导致80端口无法正常工作。比如启动时缺少必要的依赖,或者启动命令中指定了不存在的配置文件等。

二、查看80端口被占用的方法

在排查80端口被占用的问题前,需要先确认80端口是否真正被占用。

1、使用netstat命令:在终端中输入以下命令可以查看所有端口的使用情况,可在输出的结果中查找80端口。

netstat -anp

2、使用nmap工具:nmap 是一个网络端口扫描软件,可以扫描整个网络中的所有主机。在终端中输入以下命令来扫描本机的80端口是否开放。

sudo nmap -sS -p 80 localhost

结果中如果显示 80/tcp open http 则表明80端口被开放了。

3、使用Python代码:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = s.connect_ex(('localhost', 80))
if result == 0:
    print("Port 80 is open")
else:
    print("Port 80 is not open")
s.close()

三、解决80端口被占用的方法

1、关闭其他程序占用80端口:查看使用 netstat 命令或者 nmap 工具找出占用80端口的程序,关闭该程序即可。

2、修改Web服务器端口:把Web服务器的端口改为其它可用端口即可。

sudo vim /etc/apache2/ports.conf

3、重新启动Web服务器:如果Web服务器启动失败,可以查看错误日志来排查错误原因,并重启服务器。

sudo systemctl restart apache2

4、设置防火墙规则:在系统防火墙设置允许80端口的流量。

sudo ufw allow from any to any port 80 proto tcp

5、使用nginx作为反代:将nginx作为反向代理服务器,将客户端的请求通过反向代理服务器发送给真实的Web服务器即可,具体配置可参考nginx官方文档。

location / {
    proxy_pass http://localhost:8080;    #反代服务器请求转发到8080端口
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

四、总结

无论是哪种原因导致80端口被占用,都可以通过查看端口占用情况、修改Web服务器端口、重新启动Web服务器、设置防火墙规则或使用反向代理等方法来解决。在排查问题时,可以根据实际情况选择使用不同的方法。