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

时间:2019-03-03 02:43:22

标签: nginx nginx-reverse-proxy nginx-config

我有一个在本地主机上运行的应用程序,监听端口8080

nginx作为反向代理运行,正在侦听端口80

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

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

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

例如让我们说在请求标头中有一个名为'userid'的自定义变量。

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

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

server {

    location /test {

        proxy_pass http://localhost:8080;
    }

}

2 个答案:

答案 0 :(得分:2)

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

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

例如:

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

有关详细信息,请参见this document

答案 1 :(得分:0)

因此无需重写或进行任何其他操作。只需将这些参数附加到参数中,即可将要作为查询参数传递的标头参数传递给localhost应用程序,如下所示。

如果您具有自定义标头参数(如userid),则为$ http_userid

server {

    location /test {

          set $args $args&host=$http_host;

          proxy_pass http://localhost:8080;
    }
 }