【问题标题】:Avoid nginx escaping query parameters on proxy_pass避免 nginx 在 proxy_pass 上转义查询参数
【发布时间】:2013-10-06 09:51:20
【问题描述】:

我在域上代理/api,我有这个位置块。

location ^~ /api/ {
    rewrite_log on;
    rewrite ^/api/(.*) /$1$is_args$args break;
    proxy_pass http://127.0.0.1:1337;
}

只要 URL 没有查询参数,它就可以正常工作,但是一旦有,我就会在上游服务器上收到错误,例如 Could not find path: /records%3fname=hoegh.io

这里提到的%3f 是一个 URL 编码的?,由于它是 URL 编码的,上游服务器无法识别它。这可能会有所延迟,但我希望有可能让 nginx 正确处理这个问题(即在将 URL 传递给代理之前不要转义它)。

有什么想法吗?

【问题讨论】:

  • 提供的解决方案对您有用吗?请采纳答案
  • “迟钝”在这里是一个不幸和贬义的词。

标签: nginx reverse-proxy


【解决方案1】:

你不需要做任何事情。 $args 会自动传递。

如果您想修改传递的 $args,您必须重写。

set $args "foo=bar";

例如。

工作解决方案如下:

location ^~ /api/ {
    rewrite_log on;
    rewrite ^/api/(.*) /$1 break;
    proxy_pass http://127.0.0.1:1337;
}

【讨论】:

    【解决方案2】:

    你试过这个吗?一般不需要添加查询字符串,因为 Nginx 会自动添加:

    rewrite ^/api/(.*) /$1? break;
    

    【讨论】:

    • 我之前确实有过,但后来查询字符串似乎根本没有传递。
    • 对不起,我的错。我忘了在重定向字符串的末尾输入?
    猜你喜欢
    • 2013-12-28
    • 2011-12-29
    • 2011-01-27
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多