【发布时间】:2018-12-14 21:29:22
【问题描述】:
我在 docker 容器中有一个 Nginx 反向代理,它监听 3000 端口并暴露于 3002:docker run -p "3002:3000" ...。
这个想法是这个反向代理将/my-app代理到在我的笔记本电脑上运行的8080端口的实例;和/my-app/api 到云实例,在https://my-domain。
这是配置:
upstream my-laptop {
server host.docker.internal:8080; # this is a magic hostname for the laptop's IP address.
keepalive 64;
}
upstream cloud {
server my-domain.com:443;
keepalive 64;
}
server {
listen 3000;
include ssl/ssl-certs.conf;
include ssl/ssl-params.conf;
location /my-app {
proxy_pass http://my-laptop;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /my-app/api {
proxy_pass https://cloud;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
...
}
问题是:
- 当我点击
https://localhost:3002/my-app时,我收到了对/my-app/的301 响应(斜杠)。我不知道为什么会这样。本地应用实例显示在浏览器中,所以我想我可以让它暂时滑动一下? - 当我点击
https://localhost:3002/my-app/api/students时,我收到了对https://cloud/my-app/api/students的301 响应。当然,这会导致 CORS 问题,并且端点不会返回数据。
现在,我已经配置了几次反向代理,所以我完全震惊于我没有看到问题所在,这不是我第一次。
与我为不同应用程序使用的另一个反向代理相比,我尝试调整上游代理集标题;我没有想法。
我做错了什么?
【问题讨论】:
-
你试过
proxy_set_header Host $proxy_host -
使用哪个“斜杠组合”?
-
我不确定这是否重要,但我想知道
proxy_set_header和proxy_pass的顺序是否重要,所以我可能会尝试将通行证移到底部。
标签: docker nginx reverse-proxy