nginx - 将请求标头变量作为查询参数传递给上游 URL

Posted

技术标签:

【中文标题】nginx - 将请求标头变量作为查询参数传递给上游 URL【英文标题】:nginx - Passing request header variables to upstream URL as query parameter 【发布时间】:2019-07-24 16:39:42 【问题描述】:

我有一个在 localhost 上运行的应用程序正在侦听端口 8080

nginx 作为反向代理运行,监听 80 端口

因此,在端口 80 上到达 nginx 的请求被发送到在 localhost:8080 上侦听的此应用程序,并将此应用程序的响应发送回用户

现在此应用程序无法从请求标头中读取标头变量,只能读取查询参数

所以我希望 nginx 将标头值作为查询参数传递给在 localhost:8080 上侦听的此应用程序

例如假设在请求标头中有一个名为“userid”的自定义变量。

我们如何将此用户 ID 作为附加到 url 的 &userid=value 传递给在 localhost 8080 上侦听的应用程序

我当前的站点可用和站点启用测试文件是

server 

    location /test 

        proxy_pass http://localhost:8080;
    


【问题讨论】:

【参考方案1】:

如果您有一个名为 userid 的请求标头,它将在名为 $http_userid 的 Nginx 变量中可用。

您可以使用rewrite...break 语句更改原始请求的查询参数。

例如:

location /test 
    rewrite ^(.*)$ $1?userid=$http_userid break;
    proxy_pass http://localhost:8080;

详情请见this document。

【讨论】:

这导致 url 在 localhost/localhost/localhost 上无休止地进行【参考方案2】:

所以没有必要进行重写或其他任何事情。只需将要作为查询参数传递的标头参数通过附加到参数传递给 localhost 应用程序,如下所示。

如果您有自定义标头参数,如 userid,那么它将是 $http_userid

server 

    location /test 

          set $args $args&host=$http_host;

          proxy_pass http://localhost:8080;
    
 

【讨论】:

以上是关于nginx - 将请求标头变量作为查询参数传递给上游 URL的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 nginx 将路径参数传递给 lua 代码?

将查询作为参数传递给 udf 函数

将枚举类型作为参数传递给 GraphQL 查询 - Quarkus

将实例变量作为参数传递给同一类中的方法?

将对象作为参数传递给函数

试图将类作为参数传递给不同的类构造函数,但出现“转换”错误