Golang中如何使用Nginx反向代理Web应用
Golang中如何使用Nginx反向代理Web应用 我有一个简单的Web应用程序,它显示一个监听8080端口的模板。
我认为通过docker run命令运行的服务器是开发服务器。如何使用nginx在生产环境中托管我的Go应用程序?
PS:我正在使用Docker。
1 回复
更多关于Golang中如何使用Nginx反向代理Web应用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go应用中使用Nginx作为反向代理的生产环境部署,可以通过Docker容器化实现。以下是完整的配置示例:
1. Go Web应用代码 (main.go)
package main
import (
"fmt"
"net/http"
"html/template"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
tmpl := template.Must(template.New("index").Parse(`
<!DOCTYPE html>
<html>
<head>
<title>Go Web App</title>
</head>
<body>
<h1>Hello from Go Web Application!</h1>
<p>Server running on port 8080</p>
</body>
</html>
`))
tmpl.Execute(w, nil)
})
fmt.Println("Server starting on :8080")
http.ListenAndServe(":8080", nil)
}
2. Go应用Dockerfile
FROM golang:1.21-alpine
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY *.go ./
RUN go build -o /go-web-app
EXPOSE 8080
CMD ["/go-web-app"]
3. Nginx配置文件 (nginx.conf)
events {
worker_connections 1024;
}
http {
upstream go_app {
server go-app:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://go_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
4. Nginx Dockerfile
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
5. Docker Compose配置 (docker-compose.yml)
version: '3.8'
services:
go-app:
build:
context: .
dockerfile: Dockerfile.go
container_name: go-web-app
restart: unless-stopped
nginx:
build:
context: .
dockerfile: Dockerfile.nginx
container_name: nginx-proxy
ports:
- "80:80"
depends_on:
- go-app
restart: unless-stopped
6. 部署和运行命令
# 构建并启动服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 停止服务
docker-compose down
7. 验证部署
访问 http://localhost 将看到Go应用的内容,Nginx在80端口接收请求并代理到Go应用的8080端口。
这种配置提供了负载均衡能力(可通过添加更多Go应用实例扩展)、请求缓冲和静态文件服务优化。Nginx处理外部HTTP请求,Go应用专注于业务逻辑处理。

