我有一个1.)客户端,一个2.)nginx代理服务器和3.)一些服务器的地址是无法访问客户端,代理处理从客户端到这些服务器的通信。
到目前为止工作得很好。 但是现在,这些服务器中的一些需要通过HTTP摘要进行validation,而不是HTTP基本validation,并且客户端不再能够正确地在这些服务器上进行validation。
感谢wget和Wireshark,我能够解决这个问题。
有效身份validation的HTTP标头如下所示:
GET /targetpath/myfile.jpg HTTP/1.1 User-Agent: Wget/1.15 (linux-gnu) Accept: */* Host: 192.168.5.215 Connection: Keep-Alive Authorization: Digest username="myuser", realm="MyRealm", nonce="x+AfVa0pBQA=ad6ef47eb7e95f9fe8e148a9ccd22dcdb3b8a7f6", uri="/targetpath/myfile.jpg", response="6f7cf06ddededd7295ce3a16b4196528", qop=auth, nc=00000001, cnonce="26310a3e", algorithm="MD5"
由代理完成的不工作authentication的头部看起来有点不同:
GET /targetpath/myfile.jpg HTTP/1.0 Connection: Keep-Alive Host: 192.168.5.215 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0 Referer: http://localhost/ Authorization: Digest username="MyUser", realm="MyRealm", nonce="Sh3xpq0pBQA=ccc43b898eccd1933fa63383d8a6447385119db9", uri="/proxypath/192.168.5.215/targetpath/myfile.jpg", algorithm=MD5, response="068f00e3460e4b585b4a90fa76be8b27", qop=auth, nc=00000003, cnonce="cbe75557a6107092"
请注意授权标题中uri的区别。 这当然是代理服务器的请求path。 (由于客户端处理身份validation,代理只传递数据,并重写URL)我怀疑这是问题的来源。 (请注意,我无法直接在目标服务器上进行debugging来validation)
所以,问题是:有没有一种方法可以在将授权传递给目标服务器之前dynamic地重写授权? 有没有办法让代理服务器处理身份validation,而不是从客户端传递? 还是有另一种更好的方法?