在Windows服务器上部署和运行Golang Web应用的完整指南
在Windows服务器上部署和运行Golang Web应用的完整指南 我的Go应用程序在我的笔记本电脑上运行一个Web API,并且运行顺畅。

我阅读了这篇文章并使用配置文件完成了IIS设置:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:9000/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
并将编译后的文件复制到了同一位置,但是一旦我访问URL,什么也没得到,而且一旦我运行.exe文件,它很快就终止了!
有什么办法能在MS服务器上运行这个可执行文件吗?

更新
如果我在服务器上移除绑定,那么应用程序就能正常工作,看起来这个绑定过程阻塞了端口!

更多关于在Windows服务器上部署和运行Golang Web应用的完整指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html
大家好, 要在 Windows 服务器上运行 Go Web 应用程序,您可以按照以下步骤操作:
- 安装 Go:从官方网站下载并安装适用于 Windows 的最新版本 Go。
- 设置 GOPATH 环境变量:将 GOPATH 环境变量设置为您希望存储 Go 项目的路径。
- 安装 Git:如果您计划使用 Git 来管理 Go 项目的源代码,请下载并安装适用于 Windows 的 Git。
- 克隆或下载 Go 项目:从源代码仓库(例如 GitHub)克隆或下载 Go 项目。
- 构建 Go 项目:打开命令提示符并导航到项目目录。使用
go build命令来构建 Go 项目。 - 运行 Go 项目:使用
go run命令来运行 Go 项目。默认情况下,Go Web 应用将监听 8080 端口。您可以使用-port标志指定不同的端口。 - 配置 Web 服务器:为了使 Go Web 应用能够从互联网访问,您需要配置一个 Web 服务器(例如 IIS 或 Apache)以将请求转发到 Go 应用。
- 测试应用:打开 Web 浏览器并导航到服务器的 IP 地址或主机名以测试 Go Web 应用。
遵循这些步骤应该能让您在 Windows 服务器上运行 Go Web 应用程序。请注意,这些步骤的具体细节可能会因您使用的 Windows Server 具体版本和运行的 Go 项目而异。希望按照以下过程逐步操作后,您的问题能得到解决。
在Windows服务器上部署Go Web应用时,端口冲突是常见问题。IIS反向代理配置正确,但Go应用无法启动,通常是因为端口已被占用。以下是解决方案:
1. 检查端口占用
在PowerShell中运行:
netstat -ano | findstr :9000
如果端口被占用,会显示进程ID。终止占用进程或修改Go应用端口。
2. 修改Go应用端口
修改Go代码使用其他端口:
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Go Web应用运行中")
})
// 使用9001端口避免冲突
port := ":9001"
fmt.Printf("服务器运行在端口 %s\n", port)
http.ListenAndServe(port, nil)
}
3. 更新IIS反向代理配置
修改web.config指向新端口:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:9001/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
4. 使用Windows服务运行Go应用
创建服务确保应用持续运行:
方法1:使用nssm(推荐)
下载nssm,然后运行:
nssm install GoWebService "C:\path\to\your\app.exe"
nssm set GoWebService AppDirectory "C:\path\to\your\"
nssm start GoWebService
方法2:使用sc命令
sc create GoWebService binPath= "C:\path\to\your\app.exe" start= auto
sc start GoWebService
5. 防火墙配置
确保防火墙允许端口访问:
New-NetFirewallRule -DisplayName "Go Web App" -Direction Inbound -Protocol TCP -LocalPort 9001 -Action Allow
6. 调试步骤
创建测试应用验证配置:
package main
import (
"log"
"net/http"
"os"
)
func main() {
// 创建日志文件
f, err := os.OpenFile("goapp.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatal(err)
}
defer f.Close()
log.SetOutput(f)
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
log.Printf("收到请求: %s %s", r.Method, r.URL.Path)
w.Write([]byte("Go应用正常运行"))
})
log.Println("启动服务器在端口 9001")
if err := http.ListenAndServe(":9001", nil); err != nil {
log.Fatal("服务器启动失败:", err)
}
}
编译并运行测试应用,检查日志文件确认应用状态。
7. 验证IIS配置
在IIS管理器中:
- 确保应用程序池正在运行
- 检查站点绑定没有冲突
- 确认URL重写模块已安装
关键问题:IIS可能已经占用了9000端口。修改Go应用使用其他端口(如9001),并相应更新IIS反向代理配置,即可解决端口冲突问题。

