当充当WAF背后的反向代理时,Nginx删除Content-Length标头

问题描述

我将Nginx 1.16.1作为JFrog Artifactory的反向代理,并且可以通过Web应用程序防火墙从外部网络访问它们。我正在尝试让docker客户端使用此设置。它发送HEAD请求,并等待Content-Length到图层check for the existence。现在,我看到Content-Length未包含在客户端收到的响应中。我可以使用发送curl的{​​{1}}发送相同的请求来检查它:

docker

但是,我在Artifactory的访问日志中看到它设置了此响应标头。我使用$ curl -H 'User-Agent: docker/19.03.13 go/go1.13.15 git-commit/4484c46d9d kernel/4.19.128-microsoft-standard os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.13 \(linux\))' \ -H "Authorization: Bearer ${TOKEN}" \ -H 'Connection: close' \ -I \ "https://${ARTIFACTORY_URL}/v2/${IMAGE}/blobs/${DIGEST}" HTTP/1.1 200 OK Date: Mon,09 Nov 2020 14:57:05 GMT Server: Secure Entry Server Content-Type: application/octet-stream Docker-Content-Digest: sha256:[MASKED] Docker-distribution-Api-Version: registry/2.0 X-Artifactory-Id: [MASKED] X-Artifactory-Node-Id: [MASKED] Set-Cookie: SCDID_S=[MASKED]; path=/; Secure; HttpOnly Connection: close 来查看Nginx和Artifactory之间交换了哪些数据:

tcpdump

WAF上的TrafficAnalyzer显示来自Artifactory的传入响应中缺少HEAD /v2/[MASKED]/blobs/[MASKED] HTTP/1.1 X-JFrog-Override-Base-Url: https://[MASKED]:443 X-Forwarded-Port: 443 X-Forwarded-Proto: https Host: [MASKED] X-Forwarded-For: 10.10.40.14 Connection: close ClientCorrelator: 0rIKeSpqZ9E$ RequestCorrelator: 7f0100-9099-2020.11.09_1457.05.275-001 HSP_CLIENT_ADDR: [MASKED] Hsp-ListenerUri: https://[MASKED] HSP_HTTPS_HOST: [MASKED]:443 Accept: */* Authorization: Bearer [MASKED] User-Agent: docker/19.03.13 go/go1.13.15 git-commit/4484c46d9d kernel/4.19.128-microsoft-standard os/linux arch/amd64 UpstreamClient(Docker-Client/19.03.13 \(linux\)) HTTPS: on SSLSessionID: 78ad360e9ea54f5efdb72ea223a63b6cbc7788ae9a1e876620e398040d06182c SSLSessionTimeLeft: 3600 SSLSessionAge: 0 SSLCipher: ECDHE-RSA-AES128-GCM-SHA256 SSLCipherKeySize: 128 SSLProtocolVersion: TLSv1.2 Via: HTTP/1.1 Secure Entry Server HTTP/1.1 200 OK Content-Length: 2529 Content-Type: application/octet-stream Date: Mon,09 Nov 2020 14:57:05 GMT Docker-Content-Digest: [MASKED] Docker-distribution-Api-Version: registry/2.0 Server: Artifactory/7.4.1 70401900 X-Artifactory-Id: 5a2dee84b6d80d2f:1f521881:17554c79de4:-8000 X-Artifactory-Node-Id: [MASKED] Connection: close 。因此,必须由Nginx负责将其删除

现在,当我通过VPN连接以绕过WAF时,响应看起来还可以:

Content-Length

但是我也注意到,请求中设置的标头较少。那是其他一些导致Nginx删除Host: [MASKED] User-Agent: docker/19.03.13 go/go1.13.15 ... Authorization: Bearer [MASKED] Connection: close Date: Fri,06 Nov 2020 17:13:58 GMT Content-Type: application/octet-stream Content-Length: 2529 Docker-Content-Digest: [MASKED] Docker-distribution-Api-Version:registry/2.0 Server: Artifactory/7.4.1 70401900 X-Artifactory-Id: 5a2dee84b6d80d2f:1f521881:17554c79de4:-8000 X-Artifactory-Node-Id: [MASKED] Connection: close 的WAF标头吗?我在Nginx调试日志中没有看到与此相关的任何内容。有什么想法吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...