【问题标题】:Go Static Files Serve giving 404 in LinuxGo 静态文件服务在 Linux 中提供 404
【发布时间】:2021-07-07 05:26:46
【问题描述】:

我在 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 机器。

任何建议!

我的 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 

【问题讨论】:

  • 你的静态文件是否包含在linux的正确目录中?它是否在您似乎从中运行二进制文件的/home/ajay/app 目录中?
  • 嘿@WishwaPerera:随着构建工作移动静态站点目录!但是当我移动构建文件(使用go build main.go=>结果到main构建文件)我的本地计算机时,只需在没有站点目录的./main的任何文件夹中提供构建文件,我仍然可以让服务器运行适当地?但在其他操作系统中,我需要使用 go build 文件移动静态站点!这与GOPATH有关吗?但是我的 GOPATH 不包括我当前的项目目录?

标签: go mux


【解决方案1】:

部署构建文件时,相应的静态文件也需要相应移动:

这里的gApp24v1.linux 是针对 Linux 的构建。包含文件夹site的静态文件也需要放在各自的路径中:

.
├── gApp24v1.linux
└── site
    ├── dist
    │   ├── appXYZ.min.js
    └── index.html

【讨论】:

    【解决方案2】:

    您可以使用此 repo https://github.com/go-bindata/go-bindata 将您的静态文件压缩成可管理的 Go 源代码,而不是移动静态站点目录。

    【讨论】:

    • 嘿 Alex,我们可以把它放在 GitHub 中,但这些是构建文件,每次我的应用程序启动时也会这样做,如果我们这样做,它会从 Github 加载代码,稍后,它会创建如果我们想扩展操作,性能问题?
    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 2020-05-10
    • 2020-02-21
    • 2018-06-04
    • 2015-11-30
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多