Den*_*zus 12 proxy hostname node.js express
有时我想从我的节点应用程序通过邮件发送合格的 URL。或者我想设置幻像页面对象的内容。
我在部署设置中获得了这样的完整 URL。
'http://' + req.hostname + '/myapp'
Run Code Online (Sandbox Code Playgroud)
然而,在开发机器上,这通常会产生:
http://localhost/myapp而不是http://localhost:3000/myapp
我知道如何获取端口,但我不想使用类似的东西:
'http://' + req.hostname + ':' + port + '/myapp'
Run Code Online (Sandbox Code Playgroud)
在代理后面部署时会产生这样的废话。
如果应用程序在代理外部运行,是否有一种智能方法可以从请求对象获取带有端口的主机名?
kie*_*ans 14
我不确定为什么 Express Request 被弃用host,但这是一段安全的代码,可以克服在代理后面/不在代理后面运行 Express 服务器的问题。
const proxyHost = req.headers["x-forwarded-host"];
const host = proxyHost ? proxyHost : req.headers.host;
Run Code Online (Sandbox Code Playgroud)
(我发现最方便的是为涉及重定向的工作流程构建“返回”URL,例如:OAuth 2)
您正在寻找的是X-Forwarded-For 标头。如果您使用代理、负载均衡器等,这是获取原始 url 的最安全方法。检查您的请求中是否存在此内容,如果存在则使用它,否则使用您已经实现的内容。
这个明确的来源将会有所帮助:
req.hostname 的值源自 X-Forwarded-Host 标头中设置的值,该值可以由客户端或代理设置。
X-Forwarded-Proto 可以由反向代理设置,告诉应用程序是 https 还是 http,甚至是无效名称。该值由 req.protocol 反映。
req.ip 和 req.ips 值使用来自 X-Forwarded-For 的地址列表填充。
| 归档时间: |
|
| 查看次数: |
15256 次 |
| 最近记录: |