Wer*_*ner 4 nginx nginx-reverse-proxy
我有一个服务器,它返回一个包含 API 密钥的 301 HTTP 重定向 URL。重定向命中 Nginx,在那里我需要添加一个Authorization包含 API 密钥值的HTTP 标头。然后我想从发送的查询参数中删除 API 密钥
我需要翻译/google/?search=abcde&apikey=1234&version=1成/google/?search=abcde&version=1
代码
location /google/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Authorization "Bearer $arg_apikey";
proxy_pass https://google.com/;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作,但不起作用: 删除 nginx 重写中的参数
location /google/ {
if ($query_string ~ "^(.*)apikey=(.*)$") {
rewrite ^(.*)$ $uri? permanent;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Authorization "Bearer $arg_apikey";
proxy_pass https://google.com/;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
一种解决方案是将正则表达式应用于$request_uri变量(其中包含包含查询字符串的原始请求)并捕获要删除的参数之前和之后的所有内容。
例如:
map $request_uri $newuri {
default $request_uri;
~^(?<prefix>.*)apikey=[^&]+(?<suffix>.*)$ $prefix$suffix;
}
server {
...
location /google/ {
resolver ...;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Authorization "Bearer $arg_apikey";
proxy_pass https://google.com$newuri;
}
...
}
Run Code Online (Sandbox Code Playgroud)
您可能可以使用if块获得类似的结果。在此示例中,proxy_pass语句是使用map变量构造的。有关详细信息,请参阅此文档。
resolver由于proxy_pass语句中的变量,您可能需要定义 a 。有关详细信息,请参阅此文档。
| 归档时间: |
|
| 查看次数: |
1114 次 |
| 最近记录: |