![当我尝试创建自己的 api 并使用 apache2 时出现“bind:地址已在使用中”](https://linux22.com/image/675682/%E5%BD%93%E6%88%91%E5%B0%9D%E8%AF%95%E5%88%9B%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%20api%20%E5%B9%B6%E4%BD%BF%E7%94%A8%20apache2%20%E6%97%B6%E5%87%BA%E7%8E%B0%E2%80%9Cbind%EF%BC%9A%E5%9C%B0%E5%9D%80%E5%B7%B2%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%B8%AD%E2%80%9D.png)
我在实例上使用apache2
Web 服务器ec2
,并尝试使用一个go
可以发出get
请求的简单脚本。
我的go
脚本如下所示:
package main
import (
"net/http"
"fmt"
)
func say_hi(w http.ResponseWriter, r *http.Request) {
fmt.Printf("\033[0;32m%v\033[0m\n", r)
fmt.Fprint(w, fmt.Sprint("Hi"))
}
func main() {
http.HandleFunc("/say_hi", say_hi)
ip_address := "0.0.0.0:8080"
fmt.Printf("Set up ip address: %s\n", ip_address)
error := http.ListenAndServe(ip_address, nil)
if error != nil {
fmt.Println(error)
}
}
当我在我的服务器上运行脚本时ec2
出现以下错误:
listen tcp 0.0.0.0:8080: bind: address already in use
我真的不明白为什么我会收到这个错误。
我尝试进一步调查
ubuntu@ip-172-31-37-75:~$ socklist
type port inode uid pid fd name
tcp 22 8895 0 0 0
tcp 3306 9160 106 0 0
tcp 22 9569 0 0 0
tcp 44403 0 0 0 0
udp 18341 7860 0 0 0
udp 68 7939 0 0 0
但似乎没有任何东西使用这些端口。
我有端口80
并8080
打开:
ubuntu@ip-172-31-37-75:~$ netstat -nlp | grep "80"
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp6 0 0 :::8080 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
我的ports.conf
文件如下所示:
Listen 80
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
我完全是初学者,所以我可能会遗漏一些非常明显的内容。
答案1
您的输出表明,您已经有一个正在运行的程序在监听端口 8080。netstat
您似乎表明它是 Apache。您需要重新配置 Apache,使其不监听端口 8080,或者选择其他端口来运行您的 Go 程序。