0%

nginx反向代理go

客观是指不依赖于人的意识而存在的一切事物,经过研究推算得出的结论。主观与客观相反。

一、安装nginx

二、安装go

三、代码

  1. cd ~/go/src && mkdir web
  2. vim test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main

import (
"fmt"
"log"
"net/http"
"strings"
)

func printRequest(r *http.Request) {
fmt.Println("r.Form=", r.Form)
fmt.Println("r.PostForm=", r.PostForm)
fmt.Println("path=", r.URL.Path)
fmt.Println("scheme=", r.URL.Scheme)
fmt.Println("method=", r.Method)

fmt.Println("Get参数列表")
for k, v := range r.Form {
fmt.Println("Http Get["+k+"]=", strings.Join(v, " ; "))
}

fmt.Println("Post参数列表")
for k, v := range r.PostForm {
fmt.Println("Http Post["+k+"]=", strings.Join(v, " ; "))
}

fmt.Println("表单参数列表")
arraA := r.Form["a"]
fmt.Println("r.Form['a']=", arraA)
if len(arraA) > 0 {
fmt.Println("r.Form['a'][0]=", arraA[0])
}
}

func defaultFunc(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数
fmt.Println("This is func default")
printRequest(r)

fmt.Fprintf(w, "This is a default method")
}

func testFunc(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数
fmt.Println("This is func test")
printRequest(r)

fmt.Fprintf(w, "Func Test")
}

func anotherFunc(w http.ResponseWriter, r *http.Request) {
r.ParseForm() //解析参数
fmt.Println("This is func another")
printRequest(r)

fmt.Fprintf(w, "Another Func")
}

func main() {
http.HandleFunc("/", defaultFunc)
http.HandleFunc("/test", testFunc)
http.HandleFunc("/another", anotherFunc)

err := http.ListenAndServe(":9090", nil)

if err != nil {
log.Fatal("Error:", err)
}

}
  1. 运行go run test.go,浏览器打开localhost:9090,可看到终端输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
This is func another
r.Form= map[a:[b] id:[1]]
r.PostForm= map[]
path= /another
scheme=
method= GET

Get参数列表
Http Get[id]= 1
Http Get[a]= b

Post参数列表

表单参数列表
r.Form['a']= [b]
r.Form['a'][0]= b
This is func default
r.Form= map[]
r.PostForm= map[]
path= /favicon.ico
scheme=
method= GET

Get参数列表

Post参数列表

表单参数列表
r.Form['a']= []

四、设置反向代理

  1. 进入nginx配置目录cd /path/nginx/conf/vhost
  2. vim go.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 8081;
#server_name go.cn;

access_log logs/go.access.log;
error_log logs/go.error.log;
root html;
index index.html index.htm index.php;

location / {
proxy_pass http://localhost:9090;#go 服务器可以指定到其他的机器上,这里设定本机服务器

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
  1. 运行go run index.go,浏览器打开localhost:8081,可看到对应输出