使用标头过滤代理响应标头

2023-12-12

我有一个上游服务器,它经常通过返回“Set-Cookie”响应标头来设置 Cookie。

我想在上游服务器前面有一个 nginx 代理:

Browser => Nginx => Upstream

If the Browser => Nginx请求有标头X-No-Cookies: true我想要回复Upstream => Nginx => Browser不包含Set-Cookie响应头。如果X-No-Cookies有任何其他价值,我会撒谎Set-Cookie未更改地返回响应标头。我无法更改上游服务器的响应标头行为。

目前我的nginx配置如下,具体注意使用proxy_hide_header指示。我也附和了$proxy_hide_header变量在X-No-Cookies响应头。

map $http_x_no_cookies $proxy_hide_header {
  default "";
  "true"  "Set-Cookie";
}

# Homepage
server {
  listen 80;
  server_name example.com;

  location /api {
    proxy_pass        https://example.com/api;
    proxy_hide_header $proxy_hide_header;
    add_header        "X-No-Cookies" $proxy_hide_header;
  }
}

当我使用 cURL 发出请求时:

curl \
  http://example.com/api \
  -H 'X-No-Cookies: true' \
  -I

我收到以下响应标头:

Server: nginx/1.12.2
Date: Thu, 13 Dec 2018 02:26:41 GMT
Content-Type: application/json
Content-Length: 2255
Connection: keep-alive
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept,Authorization
Access-Control-Allow-Methods: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS
Access-Control-Expose-Headers: Content-Length
Set-Cookie: foo=bar; Max-Age=2592000; Expires=Sat, 12 Jan 2019 02:26:41 GMT; Path=/; Domain=example.com; Secure
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-No-Cookies: Set-Cookie

每当proxy_hide_header提供了一个 nginx 变量作为参数,它似乎没有效果。如果我将变量交换为字符串($proxy_hide_header替代"Set-Cookie")我得到了想要的行为 -Set-Cookie响应头被省略。

Edit:我已经将这个问题的代码推送到GitHub了

  • 我原来的(非工作)实现是here
  • 伊万·沙茨基的解决方案是here

多么有趣的挑战啊!确实,$proxy_hide_header不接受变量作为其参数,并且不能在内部使用if块。我们也不能使用$upstream_...直接在 a 内部的变量location阻止,因为它的值尚未评估。最后我找到了解决方案。我们总是隐藏Set-Cookieheader,然后根据需要再次设置,值通过计算map表达式:

map $http_x_no_cookies $hide_cookies {
    default "0";
    "true"  "1";
}

map $hide_cookies$upstream_http_set_cookie $cookies {
    ~^0(.*)$ $1;
}

upstream backend {
    server example.com;
}

server {
    listen 80;
    server_name example.com;

    location /api {
        proxy_pass        https://backend/api;
        proxy_hide_header Set-Cookie;
        add_header Set-Cookie $cookies;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用标头过滤代理响应标头 的相关文章

  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 为什么使用HTTP协议时需要指定端口号?

    即使我们使用HTTP协议 为什么还需要用IP地址指定端口号 例如 http xyz 8080 这到底是什么意思 我们已经知道 在使用 HTTP 时 请求将在端口 80 上提供服务 那么为什么我们要显式指定端口呢 HTTP 的默认端口为 80
  • nginx server_name 在流块内可能吗?

    目前设置如下 stream server listen 9987 udp server name subdomain EXAMPLE com this line is resulting in an error proxy pass loc
  • Docker 中的 NGINX 缓存 IP 地址并提供错误的 Content-Type

    Summary 我想让NGINX 不是NGINX Plus 通过使用变量从DNS名称重新解析IP地址proxy pass 如建议的这篇 Nginx 官方文章 在变量中设置域名 部分 https www nginx com blog dns
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • Openresty 中的并发模型是什么?

    我很难理解 openresty 或 nginx 的并发模型 我读了Lua变量作用域 http wiki nginx org HttpLuaModule Lua Variable Scope 它解释了变量的生命周期 但它没有说明对它们的并发访
  • Chrome 开发工具无法显示响应,即使返回的内容具有标题 Content-Type:text/html;字符集=UTF-8

    为什么我的 Chrome 开发者工具显示 无法显示响应数据 当返回的内容是text html类型时响应 在开发者工具中查看返回的响应的替代方法是什么 我认为只有当您选中 保留日志 并且您在导航离开后尝试查看先前请求的响应数据时 才会发生这种
  • RestSharp RestClient的默认超时值是多少?

    任何人都知道默认超时值休息锐利 https github com restsharp 休息客户端 RestSharp 在底层使用 HttpWebRequest 它有一个默认超时 https msdn microsoft com en us
  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • python 2.7 中的 HTTP 2 请求

    在 python 中向 HTTP 1 和 HTTP 2 发出请求有什么区别吗 我可以像这样在 python 中进行 HTTP 1 x 调用 url http someURL values param1 key param2 key2 dat
  • 诸如用于测试 HTTP 请求的虚拟 REST 服务器之类的东西? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在四处寻找 但找不到任何这样的网站 我想知道是否有一些虚拟服务器可以响应测试 GET 请求并返回
  • 使用 Nginx 在 Docker 容器内部署带有路由器的 Angular2

    我正在尝试部署一个使用框架的路由器功能的 Angular 2 但在 docker 容器内使用 nginx 为其提供服务时遇到一些问题 由 angular cli 构建的 Angular 应用程序具有如下文件结构 dist 08c42df75
  • 抑制 nginx 访问被拒绝错误日志

    我在 nginx 中设置了一些规则来拒绝 IP 访问 这很有效 但对于来自被拒绝 IP 的每个请求 都会记录以下开头的错误 error 7325 0 5761 access forbidden by rule client 有没有办法抑制这
  • JS 库请求的常见 HTTP 标头是什么?

    使用JavaScript 框架原型 http www prototypejs org 我注意到 Ajax 请求通过一个名为X Requested With 其他 JavaScript 库 如 jQuery dojo 和 YUI 是否会向其
  • Nginx merge_slashes 重定向

    我在我的 Java 应用程序中使用 nginx 我的问题是 nginx 正在合并斜杠 我无法将我的网站重定向到正确的版本 例如 http goout cz cs koncerty praha 被合并到 http goout cz cs ko
  • 错误请求 400:nginx/gunicorn

    我已经遵循了这个教程 http blog wercker com 2013 11 25 django 16 part3 html http blog wercker com 2013 11 25 django 16 part3 html我现
  • Django + nginx + uwsgi 无法登录

    我有非常简单的登录逻辑 类似于官方 Django 解决方案 class Login FormView template name login html form class AuthenticationForm def get self a
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • 上游太大 - nginx + codeigniter

    我从 Nginx 收到此错误 但似乎无法弄清楚 我正在使用 codeigniter 并使用数据库进行会话 所以我想知道标题怎么会太大 有没有办法检查标题是什么 或者看看我能做些什么来修复这个错误 如果您需要我提供任何conf文件或其他文件
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了

随机推荐

  • 使用 spring jpa 和 spring test 时,数据未插入到数据库中

    RunWith SpringJUnit4ClassRunner class Transactional ContextConfiguration classes SimpleConfiguration class public class
  • iOS 7.1 颜色变化,如何更改搜索栏颜色?

    On iOS7 0 3 7 0 6 my searchBar colour is Gold yellow colour like this 但在 iOS 7 1 上 颜色变成了这样 I set searchBar tintColor UIC
  • 解析异常:在第 1 行第 0 列:未找到元素

    我有一个奇怪的问题 我收到以下导致强制关闭的错误 org apache harmony xml ExpatParser ParseException 在第 1 行第 0 列 在 org apache harmony xml ExpatPar
  • 将 Java 中的加密代码转换为 Ruby

    我一直在尝试将java中的加密代码转换为ruby 但我无法完全做到这一点 我得到不同的价值观 passphrase passphrase STATIC KEY byte key passphrase getBytes UTF 8 Messa
  • 在 Ubuntu 上绘制大型示波器文件时出现内存错误

    我正在尝试读取大型示波器 trc文件并绘制它们 绘制一个文件是可行的 但是一旦我将脚本放入循环中 尝试绘制所有文件 1 个文件一个循环 我就会得到一个MemoryError Code import os import pandas as p
  • 使用 Adob​​e CQ5 的外部数据库?

    有什么办法可以连接外部数据库吗mysql可以连接到Adobe CQ5 Adobe cq5 中的 JCR Java Content Repository 现在默认连接到 H2 数据库 如何使其使用 sql mysql 转到 system co
  • 如何强制 Visual Studio 引用本地企业库 DLL 文件而不是已安装的目录文件

    我有一个引用企业库 DLL 的 asp net 项目 我可以构建和部署我的项目 但部署构建失败 因为它找不到 DLL 例如 我查看了 Microsoft Practices EnterpriseLibrary Common 的属性 我注意到
  • 我可以在 OpenCV 中使用重映射来获取点位置吗

    我拍了一张照片A使用 RGB 相机 我知道一个点的位置g在照片中A 相机需要进行相机校准 现在我想知道点的位置g校准后 我使用的代码如下 但我想获取点位置 而不是图像 我怎样才能做到这一点 你能给我一些建议吗 initUndistortRe
  • jquery 选项卡的下一个-上一个功能

    我需要在单击 Next 和 Prev html 按钮时为 jquery 选项卡提供 Next Prev 功能 我在用jquery 1 9 1 js and jquery ui 1 10 2 custom js文件 我已经实现了下面的代码 但
  • 如何使用sql定义的函数作为字段?

    我正在使用 SQL 在 Sql Management Studio 2012 中创建表 如何使用 Sql Server 中已定义的名称 例如 User ID User Name 创建字段或列 我想将它们用作表中的字段 表定义来自重复帖子 c
  • VB6代码升级[重复]

    这个问题在这里已经有答案了 可能的重复 从 VB6 迁移到 NET 的最佳策略 Visual Basic 6 0 转换工具比较 有没有任何人都可以推荐的好工具来将商业 VB6 应用程序转换为 VB NET 应用程序 我发现了一些免费的和一些
  • 尝试对 python httplib 中无法访问的网络进行套接字操作

    我正在尝试使用 httplib 从 django 创建 REST 客户端 但它拒绝连接 我尝试了以下方法 import hashlib import hmac from django shortcuts import render to r
  • 更新期间 MS Access 字段过多

    当我尝试在 MS Access 中更新表时 它给出错误 指出定义的字段太多 我用谷歌搜索 发现我需要修复和压缩 我做了 但仍然不起作用 有人有什么想法吗 另外 什么实际上算作 太多字段 计数器 Thanks 我似乎找到了答案 Microso
  • 在保存之前删除不会失效:是真的吗?

    我的情况 我有复杂的 24 个实体 许多关系和许多有序对多关系 模型Core Data 现在假设我有一个实体PlayList和一个实体Song 并在PlayList有序对多关系Song 这种关系存在逆关系 并且两者都有nullify删除规则
  • 计算文件中每一列的平均值

    我有一个包含 n 行 以逗号分隔 和列的文本文件 我想找到每列的平均值 不包括空字段 示例输入如下所示 1 2 3 4 6 7 期望的输出是 2 5 4 5 4 5 我尝试过 awk F for i 1 i lt NF i sum i su
  • C# - 将对象保存到 JSON 文件

    我正在编写一个 Windows Phone Silverlight 应用程序 我想将对象保存到 JSON 文件 我写了下面的代码 string jsonFile JsonConvert SerializeObject usr Isolate
  • 使用批处理运行带有参数的exe

    如何将参数传递到运行 exe 的批处理文件中 我有一个需要 2 个参数的程序 我想使用具有定义参数的 bat 文件运行它 5 五次 像这样的东西 FOR L G IN 1 1 5 DO start path program exe 20 1
  • 为什么 gcc 和 clang 为 std::find 生成这么多代码?

    我在 godbolt org 中输入以下代码 并使用 gcc 10 1 和 clang 10 编译它 include
  • 按键表达式存储静态过滤器

    我有一个函数 当传入一个时 它会生成一个表达式来通过主键过滤表Object 这非常类似于Find函数 只是它没有实现 所以你可以传递一个IQueryable之后周围 public static Expression
  • 使用标头过滤代理响应标头

    我有一个上游服务器 它经常通过返回 Set Cookie 响应标头来设置 Cookie 我想在上游服务器前面有一个 nginx 代理 Browser gt Nginx gt Upstream If the Browser gt Nginx请