我在实例上使用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 程序。