Go 语言 Web 应用怎么使用 Nginx 部署?
大家好,我是 frank。 欢迎大家点击标题下方蓝色文字「Golang 语言开发栈」关注公众号。
01
介绍
Golang 标准库 net/http
和 Go 语言 Web 框架,比如 Gin、Beego 和 Iris 等,可以很方便地构建一个 Web 应用。
Nginx 是一个 HTTP 和反向代理服务器、一个邮件代理服务器和一个通用的 TCP/UDP 代理服务器。本文重点不是介绍 Nginx,感兴趣的读者朋友们请自行查阅 Nginx 相关资料了解更多。
为什么我们还需要使用 Nginx 部署 Go 语言开发的 Web 应用呢?
因为我们可以使用 Nginx 提供的反向代理功能,将 Go 语言开发的 Web 应用接入 Nginx,从而将 Nginx 的强大功能赋能到 Go 语言开发的 Web 应用中。
本文我们介绍怎么使用 Nginx 部署一个 Go 语言开发的 Web 应用。
02
构建一个 Web 应用
首先,我们需要先构建一个 Web 应用,Gin 是一个用 Golang 编写的 HTTP Web 框架。为了方便,我们使用 Gin 框架构建一个 Web 应用。
示例代码:
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
阅读上面这段代码,使用 Gin 框架构建一个监听 8080
端口的 Web 应用。
运行代码,使用浏览器访问 http://YourIP:8080/ping
,返回结果是 {"message":"pong"}
。
03
使用 Nginx 部署
使用终端通过 ssh 方式登录到 Linux 服务器,执行命令 nginx -t
,通过输出结果我们可以得到 Nginx 配置文件的路径。
# nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
根据输出结果可知,Nginx 配置文件的路径是 /usr/local/openresty/nginx/conf/nginx.conf
。
编辑 Nginx 配置文件:
server {
listen 8081;
location / {
proxy_pass http://127.0.0.1:8080;
}
}
在 http{}
块中,新增以上代码,Nginx 监听 8081
端口,访问 Nginx 的 8081
端口,反向代理到监听 8080
端口的 Go 语言开发的 Web 应用,如果读者朋友们有自己的域名,还可以将域名配置到 server{}
块中。
保存并退出 Nginx 配置文件后,执行命令 nginx -t
测试配置文件语法是否有误,没有问题的话,执行命令 nginx -s reload
,重新加载配置文件(前提是 Nginx 已启动,如果 Nginx 还未启动,可以执行命令 nginx
,启动 Nginx)。
然后,在浏览器访问 http://YourIP:8081/ping
,返回结果也是 {"message":"pong"}
。
04
总结
本文我们介绍怎么使用 Nginx 部署 Go 语言开发的 Web 应用,从而将 Nginx 的强大功能赋能给 Go 语言开发的 Web 应用。
实际上,就是使用 Nginx 的反向代理功能,将 Nginx 监听端口收到的请求转发到 Go 语言开发的 Web 应用监听的端口上。
建议读者朋友们自行操作一遍,从而加深体会。感兴趣的读者朋友们,关于 Gin 框架 和 Nginx 的更多内容,请自行查阅相关资料了解更多。
推荐阅读:
- Go 1.18 新增三大功能之一“模糊测试”使用方式
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- Go 语言学习之测试
- Golang 语言怎么高效使用字符串?
- Golang 语言的标准库 log 包怎么使用?
参考资料:
- https://gin-gonic.com/docs/
- https://nginx.org/en/
相关文章
- go递归实现快排
- 使用 Go + HTML + CSS + JS 构建漂亮的跨平台桌面应用
- 2022-10-12:以下go语言代码输出什么?A:1;B:2;C:panic;D:不能编译。 package main import “fmt“ func m
- 如何优雅的通过Shell脚本一键部署GO项目到服务器 |Go主题月
- Go 错误处理篇(二):defer 语句及其使用
- 「Go工具箱」推荐一个简单、实用的图像处理工具:imaging
- 「Go工具箱」一个简单、易用的多错误管理包:go-multierror
- [Golang]Go的channel
- Go 模块 verifying xxx/go.mod: checksum mismatch 问题处理
- 使用go的并发性来解决Hilbert酒店问题
- go的数据类型-其他数据类型-pointer(一)
- Go-标准库-sort(三)
- Go-包管理-go get(一)
- Go语言nil:空值/零值
- Go语言文件锁操作
- Go从入门到精通(一)go语言初识详解编程语言
- 使用Go语言来操作Oracle数据库(go语言oracle)
- Go语言二叉树数据结构的应用
- 编程新精英:Go语言 Redis开发(go语言redis开发)
- Go语言在Linux上的编译实践(golinux编译)
- Go 程序的持续分析
- SQL Server快速上手GO!(sqlserver go)
- Go语言与Linux:全新的开发环境体验(go语言linux)
- 部署Go语言快速连接Oracle实现轻松部署(go连接oracle简单)
- 数据库探索Go语言与Oracle数据库的结合(go语言中的oracle)
- 数据库Go语言实现监控Oracle数据库(go监听oracle)
- 持续发烧,聊聊Dart语言的并发处理,能挑战Go不?
- javascript:history.go()和History.back()的区别及应用
- GO语言学习指南