Docker微服务和Prod上的Nginx

时间:2018-04-16 22:29:43

标签: docker nginx

您好我在这台服务器上安装了一台机器(服务器)和nginx(本机)。

我的域名 hotels.com(例如)

子域 api.hotels.com

这是机器上子域的conf文件(本机nginx):

server {
    listen 80;

    server_name api.hotels.com;

    location / {
        proxy_pass http://127.0.0.1:3000$request_uri;;
    }
}

我使用微服务架构,2个服务构建我的应用程序: 用户 - 服务:3030,付款服务:3080

我想公开api.hotels.com/users/ AND api.hotels.com/payment

所以我选择在端口:3000上使用nginx(docker container)作为apiGateway,我想代理特定服务,所以使用此配置

server {
    listen 3000;

    location /users/ {
        proxy_pass http://users:3030/;
    }

    location /payment/ {
        proxy_pass http://users:3080/;
    }
}
  • 在localhost中它对我来说很好,但在服务器和域中发生了错误。

如果我试图获得http://api.hotels.com我从nginx(机器)获得nginx:好

但如果尝试获取http://api.hotels.com/users,则会将浏览器中的网址重写为http://127.0.0.1/users然后中断。

*注意:我使用docker-compose来提升这2个服务和nginx容器。

问题:

1)如何解决这个问题? 2)我的流程还可以,或者这个应用程序还有其他流程吗?

我的目的流示例:

1)客户http://api.hotels.com/users

2)服务器所有api.hotels.com ==> http://localhost:3000(api网关)

3)Nginx容器(端口:3000)==>按名称代理特定服务(本例中的用户)

1 个答案:

答案 0 :(得分:1)

您的应用程序看起来不错,问题只是配置。 你可以试试这个配置:

server {
    server_name api.hotels.com;
    listen 80;

    location /users/ {
        proxy_pass http://users:3030/;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host
    }

    location /payment/ {
        proxy_pass http://users:3080/;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host
    }
}

在这种情况下你的nginx容器暴露ports =>的 INCOMING_PORT:80

然后在你的例子中,它将在docker-compose.yml

中看起来像这样
...
services:
   api-gateway:
     image: nginx:latest
     ports:
       - "3000:80"
...
以这种方式,您的api网关更加动态。您可以随时更改收入端口,容器内的nginx将侦听端口80,并将按名称代理特定服务。

祝你好运:)