【问题标题】:NGINX: How to add query string in a reverse proxy?NGINX:如何在反向代理中添加查询字符串?
【发布时间】:2019-07-22 23:09:49
【问题描述】:

我正在尝试设置一个反向代理来请求休息 api,比如说我正在发出这样的请求:

127.0.0.1/v1/resources/get/list/23948

目标主机上的预期请求应该是这样的:

http://api.example.com/v1/resources/get/list/23948?key=skdma239mfmd0idfm9844

您可以看到在预期的请求中有一个查询字符串,这样做的原因是为了保护客户端的值,以免敏感数据泄露。

我尝试过这样的位置定义:

location /v1/resources/get/ {
    proxy_pass http://api.example.com$uri?key=sdkmfg234msdkmad9898
}

但由于某种原因,NGINX 以 500 响应。

是否可以在proxy_pass 中添加查询字符串?或者是否可以将查询字符串添加到反向代理以保护这些数据?

注意:我知道 stackoverflow 中有一个问题与这个问题相似,但该问题中的答案都没有帮助解决我的问题。 我已经编辑了我上次尝试的代码,nginx 响应 502 状态

【问题讨论】:

  • 这可能是因为.com$uri 之间多了一个/。不要忘记尾随的;。试试看:proxy_pass http://api.example.com$uri?key=sdkmfg234msdkmad9898;
  • @Weft 该问题中给出的答案都没有帮助我。
  • @RichardSmith 我试过你提到的,但是 nginx 返回 502 错误;
  • 5xx 错误应在错误日志中附上原因说明。

标签: nginx nginx-reverse-proxy


【解决方案1】:

在深入阅读nginx 文档并在@RichardSmith 的帮助下,我能够使用resolver 成功地通过proxy_pass 提出请求。

问题是proxy_pass带域使用时,nginx自带的resolver会尝试自己解析,看DNS是否被缓存,由于没有定义DNS resolver,nginx无法完成请求。

我的位置定义最终是这样的:

location /v1/resources/get/ {
    resolver 8.8.8.8;
    proxy_pass http://api.example.com$uri?key=sdkmfg234msdkmad9898
}

因为这是为了测试,我使用了谷歌的默认解析器8.8.8.8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多