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应用专注于业务逻辑处理。

回到顶部