Nginx - 使用身份验证反向代理至 IIS6

Nginx - 使用身份验证反向代理至 IIS6

为了测试目的,我为 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 完成下一个版本。下一个版本计划修复此问题(希望如此)

相关内容