go语言实现简单ngnix样例

目录

1、代码实现样例:

2、postman调用ngnix,转发:


1、代码实现样例:

package main

import (
	"bytes"
	"encoding/json"
	"io"
	"log"
	"net/http"
	"net/http/httputil"
	"net/url"
)

func main() {
	// 定义反向代理的目标服务器地址
	targetURL, err := url.Parse("http://localhost:8082")
	if err != nil {
		log.Fatalf("Failed to parse target URL: %v", err)
	}

	// 创建反向代理
	proxy := httputil.NewSingleHostReverseProxy(targetURL)

	// 修改请求处理函数
	http.HandleFunc("/login", handler(proxy))
	if err := http.ListenAndServe(":8887", nil); err != nil {
		log.Fatalf("Failed to start proxy server: %v", err)
	}
}

func handler(proxy *httputil.ReverseProxy) http.HandlerFunc {
	return func(w http.ResponseWriter, r *http.Request) {
		log.Printf("Received request: %s %s", r.Method, r.URL.Path)

		// 构造传入参数
		params := map[string]string{
			"username": "user1",
			"password": "password1",
		}
		jsonData, err := json.Marshal(params)
		if err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			log.Printf("Failed to marshal JSON: %v", err)
			return
		}

		// 发送 POST 请求到目标服务器
		resp, err := http.Post("http://localhost:8082/login", "application/json", bytes.NewBuffer(jsonData))
		if err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			log.Printf("Failed to send POST request: %v", err)
			return
		}
		defer resp.Body.Close()

		// 复制响应头部
		for key, values := range resp.Header {
			for _, value := range values {
				w.Header().Add(key, value)
			}
		}

		// 将目标服务器的响应内容直接返回给客户端
		w.WriteHeader(resp.StatusCode)
		if _, err := io.Copy(w, resp.Body); err != nil {
			log.Printf("Failed to write response: %v", err)
		}

		log.Printf("Forwarded response: %d", resp.StatusCode)
	}
}

2、postman调用ngnix,转发:

相关推荐
程序猿-瑞瑞39 分钟前
24 go语言(golang) - gorm框架安装及使用案例详解
开发语言·后端·golang·gorm
m0_748238922 小时前
webgis入门实战案例——智慧校园
开发语言·ios·swift
Legendary_0086 小时前
LDR6020在iPad一体式键盘的创新应用
ios·计算机外设·ipad
慕城南风9 小时前
Go语言中的defer,panic,recover 与错误处理
golang·go
/**书香门第*/15 小时前
Laya ios接入goole广告,搭建环境 1
ios
LeonNo1117 小时前
golang , chan学习
开发语言·学习·golang
龙门吹雪18 小时前
GO语言基础面试题
golang·面试题·map·channel·
zyh_03052118 小时前
GIN中间件
后端·golang·gin
wakangda21 小时前
React Native 集成 iOS 原生功能
react native·ios·cocoa
007php0071 天前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程