如何解决NGINX proxy_pass 更改方案
我有一个从外部地址接收请求的服务,例如connect
action 和内部地址,例如本地主机:8080。
我必须让所有针对此服务的请求看起来好像它们将被定向到相同的主机名。
我最初的计划是设置一个 NGINX 反向代理,当通过 localhost:8081 联系时,它会与 localhost
交换 example.com
。
map $http_host $served_host {
default $http_host;
localhost:8081 example.com;
}
server {
listen 8081;
listen [::]:8081;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $served_host;
}
}
这个差不多了,但是方案还是错了。来自外部的请求被定向到 https://example.com,而来自私有网络 (localhost:8081) 的它们现在被定向到 https://example.com。
如何更改 https -> http 或 http -> https?两者都可以,我只需要完全相同的地址。
解决方法
我自己想出来的,以防有人被这个问题绊倒:
原始请求添加了带有值 X-Forwarded-Proto
的 https
标头。该服务使用它来重建原始地址,包括 https://
。而内部的没有这个头。所以只需添加
proxy_set_header X-Forwarded-Proto https;
到代理传递使内部请求看起来也使用方案 https
。我不确定这是否是最佳解决方案,但它正在工作:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。