Go 静态文件服务在 Linux 中提供 404
Go Static Files Serve giving 404 in Linux
我在 Go 中有一个简单的 Web 服务器,如下所示:
func webServerWay() {
r := mux.NewRouter()
//File Upload Code
r.HandleFunc("/upload", uploadFile).Methods("POST")
//Test Message
r.HandleFunc("/test", test).Methods("GET")
r.PathPrefix("/site/").Handler(http.StripPrefix("/site/", http.FileServer(http.Dir("site"))))
if err := http.ListenAndServe(":8010", r); err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
简单测试函数如下所示:这是一个查看端点是否可达的简单函数。
func test(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome it Works!")
}
网站结构是:
├── go.mod
├── go.sum
├── main.go
└── site
├── dist
└── index.html
该应用程序在我的本地开发环境中完美运行,即 Mac OS:
Ajay@apples-MacBook-Air:/$ curl localhost:8010/test
Welcome it Works!
Ajay@apples-MacBook-Air:/$ curl localhost:8010/site/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>gAnalytics</title>
</head>
<body>
<div id="root"></div>
</body>
<script defer src="./dist/appXYZ.min.js"></script></head>
</html>
但是当我为 Linux(Ubuntu 20.04)x64
创建构建时
GOOS=linux GOARCH=386 go build -o gApp24v1.linux main.go
和运行Linux中的代码:
sudo ./gApp24v1.linux
静态站点服务不起作用,但我可以到达测试端点:
root@gapp24:/home/ajay/app# curl localhost:8010/test
Welcome it Works!
root@gapp24:/home/ajay/app# curl localhost:8010/site/
404 page not found
我在静态文件处理程序中尝试了多种代码方式,查看其他答案并阅读文档,但它在我的 macOS 而不是我的 Linux Machine 中工作。
任何建议!
我的 Linux(Ubuntu 机器)中的 netstat 如下:
root@gapp24:/home/ajay/app# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 671/vsftpd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 547/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 704/sshd: /usr/sbin
tcp6 0 0 :::8010 :::* LISTEN 1167/./gApp24v1.lin
tcp6 0 0 :::22 :::* LISTEN 704/sshd: /usr/sbin
部署构建文件时,相应的静态文件也需要相应移动:
此处 gApp24v1.linux
是 Linux 的构建。包含文件夹 site
的静态文件也需要放在相应的路径中:
.
├── gApp24v1.linux
└── site
├── dist
│ ├── appXYZ.min.js
└── index.html
您可以使用此存储库 https://github.com/go-bindata/go-bindata
将静态文件压缩到可管理的 Go 源代码中,而不是移动静态站点目录。
我在 Go 中有一个简单的 Web 服务器,如下所示:
func webServerWay() {
r := mux.NewRouter()
//File Upload Code
r.HandleFunc("/upload", uploadFile).Methods("POST")
//Test Message
r.HandleFunc("/test", test).Methods("GET")
r.PathPrefix("/site/").Handler(http.StripPrefix("/site/", http.FileServer(http.Dir("site"))))
if err := http.ListenAndServe(":8010", r); err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
简单测试函数如下所示:这是一个查看端点是否可达的简单函数。
func test(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Welcome it Works!")
}
网站结构是:
├── go.mod
├── go.sum
├── main.go
└── site
├── dist
└── index.html
该应用程序在我的本地开发环境中完美运行,即 Mac OS:
Ajay@apples-MacBook-Air:/$ curl localhost:8010/test
Welcome it Works!
Ajay@apples-MacBook-Air:/$ curl localhost:8010/site/
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>gAnalytics</title>
</head>
<body>
<div id="root"></div>
</body>
<script defer src="./dist/appXYZ.min.js"></script></head>
</html>
但是当我为 Linux(Ubuntu 20.04)x64
创建构建时GOOS=linux GOARCH=386 go build -o gApp24v1.linux main.go
和运行Linux中的代码:
sudo ./gApp24v1.linux
静态站点服务不起作用,但我可以到达测试端点:
root@gapp24:/home/ajay/app# curl localhost:8010/test
Welcome it Works!
root@gapp24:/home/ajay/app# curl localhost:8010/site/
404 page not found
我在静态文件处理程序中尝试了多种代码方式,查看其他答案并阅读文档,但它在我的 macOS 而不是我的 Linux Machine 中工作。
任何建议!
我的 Linux(Ubuntu 机器)中的 netstat 如下:
root@gapp24:/home/ajay/app# netstat -plnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 671/vsftpd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 547/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 704/sshd: /usr/sbin
tcp6 0 0 :::8010 :::* LISTEN 1167/./gApp24v1.lin
tcp6 0 0 :::22 :::* LISTEN 704/sshd: /usr/sbin
部署构建文件时,相应的静态文件也需要相应移动:
此处 gApp24v1.linux
是 Linux 的构建。包含文件夹 site
的静态文件也需要放在相应的路径中:
.
├── gApp24v1.linux
└── site
├── dist
│ ├── appXYZ.min.js
└── index.html
您可以使用此存储库 https://github.com/go-bindata/go-bindata
将静态文件压缩到可管理的 Go 源代码中,而不是移动静态站点目录。