![Nginx - 使用身份验证反向代理至 IIS6](https://linux22.com/image/493182/Nginx%20-%20%E4%BD%BF%E7%94%A8%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%87%B3%20IIS6.png)
为了测试目的,我为 IIS6 服务器设置了 nginx 反向代理,一切正常。
但是当我尝试在 IIS6 网站上使用“Windows 身份验证”时,浏览器身份验证输入却无法到达。
读了一些资料后,我发现了一个明显的事实:)nginx 还不支持 HTTP/1.1 反向代理!
我的问题:有人知道此类请求的“解决方法”吗?
谢谢
答案1
我已经在这里的测试环境中部分地完成了这项工作。
背景
我们有 IIS6 为我们的内联网 CMS 提供服务(CMS 是一个 ISAPI 插件)。这是在 IIS 中设置的网站,用于集成 Windows 身份验证(用于安全性和用户个性化)。
我想启用 gzip 压缩,但是由于我们在 CMS 中启用了某些功能,我们无法通过 IIS 的 gzip 设置来实现这一点(如果我们这样做,每次向 CMS 发出请求时它都会崩溃)。
因此,我目前正在测试在 IIS 前面使用 nginx 反向代理进行内容 gzip 压缩的设置。
什么有效/什么无效?
通过此设置进行的 IE6/7 身份验证仍然可以正常工作,我无需进行任何更改。
然而,Firefox 需要做出改变。之前,没有 nginx,Firefox 已network.automatic-ntlm-auth.trusted-uris
设置为允许我们的内部网服务器进行透明 NTLM 身份验证。一旦 nginx 加入其中,您就会反复看到站点登录框,并且您的凭据永远不会被接受。但是,添加内部网服务器可以network.negotiate-auth.trusted-uris
解决这个问题(适用于 Windows 上的 Firefox,但不适用于 OS X)。身份验证方法似乎略有改变?之前允许 NTLM 身份验证可以正常工作,现在似乎要进行 SPENGO 了?
因此,IIS6 之前的 nginx 的当前情况给我留下了以下印象:
作品
- XP 上的 IE6
- XP 上的 IE7
- XP 上的 FF3.5(更改 about:config 之后)
不起作用(凭证从未被接受)
- OS X 上的 FF3.5
- OS X 上的 Safari 3
- XP 上的 Safari 4
- 黑莓 8700(模拟器)
- 黑莓 9000(模拟器)
猜测一下为什么我的(部分)有效而你的无效... 可能是我的配置中有一些代理身份验证握手的关键内容,而你的配置中却没有?比如转发真实的客户端 IP?如果你想尝试一下,我的 nginx 配置的相关服务器部分如下。
server {
listen 80;
server_name testintralive;
location / {
proxy_pass http://localhost:81;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_max_temp_file_size 0;
proxy_connect_timeout 30;
proxy_read_timeout 120;
}
}
答案2
我让它工作的唯一方法是使用基本身份验证并等待 igor 完成下一个版本。下一个版本计划修复此问题(希望如此)