【发布时间】:2018-04-16 22:29:42
【问题描述】:
您好,我在这台服务器上安装了一台机器(服务器)和 nginx(本机)。
我的域是hotels.com(例如)
和子域 api.hotels.com
这是机器(本地 nginx)上子域的 conf 文件:
server {
listen 80;
server_name api.hotels.com;
location / {
proxy_pass http://127.0.0.1:3000$request_uri;;
}
}
我使用微服务架构构建我的应用程序,有 2 项服务: users-service:3030 , payment-service:3080
我想公开 api.hotels.com/users/ 和 api.hotels.com/payment
所以我选择在端口:3000 上使用 nginx(docker 容器)作为 apiGateway,并且我想代理特定的服务,所以使用这个配置
server {
listen 3000;
location /users/ {
proxy_pass http://users:3030/;
}
location /payment/ {
proxy_pass http://users:3080/;
}
}
- 在本地主机中它对我来说工作正常,但在服务器和域中发生错误。
如果我尝试获取 http://api.hotels.com 我从 nginx(machine) 获取 nginx:好
但如果尝试获取http://api.hotels.com/users,它会将浏览器中的url重写为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 gateway)
3) Nginx Container(on port:3000) ==> 按名称代理特定服务(本例中为用户)
【问题讨论】:
-
您正在尝试浏览错误的 URL。请改用api.hotels.com:3000/users。而且您的第二个服务器块中缺少 server_name ,您的微服务的 proxy_pass 指令所在的位置。这可能会导致问题。
-
嗨,但我不想在 cuatomer 的生产中使用端口,我如何才能为 mu purpos 配置配置
-
如果你不想使用不同的端口,你必须把你的位置块(在第二个服务器块上)放到第一个服务器块,在通用位置块(位置/)之前。它应该这样工作。
-
看不懂你的回答抱歉