Nginx转发到go服务当中

通过docker-compose编排的容器总是有一些奇怪的问题

问题核心就是go-server和nginx所属不同的容器, 需要外界能访问到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
server {
listen 80;
server_name .a.com;

charset utf-8;
access_log /home/a.com.access.log;

location /(css|js|fonts|img)/ {
access_log off;
expires 1d;

root "/path/to/app_a/static";
try_files $uri @backend;
}

location / {
try_files /_not_exists_ @backend;
}

location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;

proxy_pass http://127.0.0.1:8080;
}
}

beego-nginx部署

那么如果是两个容器当中呢? 基于上面的例子, 我们需要用到upstream,

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

upstream go_server_proxy {
# 这里的server 需要用到 容器名:端口 的形式
server go_server:9090;
}

server {
listen 80;
server_name localhost;
root /var/www;
index index.html;

charset utf-8;
access_log /var/log/nginx/def.access.log;

location /(css|js|fonts|img)/ {
access_log off;
expires 1d;

root "/var/www/static";
try_files $uri @backend;
}

location / {
try_files /_not_exists_ @backend;
}

location @backend {
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://go_server_proxy;
}
}

这样做的原因是容器之间的ip并不固定, 使用容器名做host地址是更简单的选择