配置 nginx plus 以作为反向代理与 ssrs(和 ntlm)一起工作

Configuring nginx plus to work with ssrs (and ntlm) as a reverse proxy

我正在尝试在另一台机器上使用 nginx plus 服务器作为 ssrs 实例 运行 的反向代理。 Nginx 托管在 linux (Ubuntu) 服务器上; ssrs(当然)在 Windows 服务器上。直接访问 ssrs(不通过反向代理)工作正常。

我的问题是如何针对这种情况正确配置 Nginx Plus。这是我的 nginx 配置文件的相关部分:

upstream reports_backend {
    server a.b.c.d:443;
    ntlm;
}

server {
    ...
    location /Reports {
        rewrite ^/Reports/(.*)? /Reports/ break;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host a.b.c.d;
        proxy_pass https://reports_backend/Reports;
    }

    ...
}

这确实成功连接到服务器 a.b.c.d(不是它的真名)上的 ssrs,我可以很好地浏览 ssrs 门户网站中的报告文件夹。单击报告时会出现问题。 URI 从 "Reports" 更改为 "ReportServer",这使我从 Nginx 得到 404(未找到)。

我试过将另一个位置定义为与上述类似:

location /ReportServer {
    rewrite ^/ReportServer/(.*)? /ReportServer/ break;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_set_header Host a.b.c.d;
    proxy_pass https://reports_backend/ReportServer;
}

此方法的问题在于它在遵循 /ReportServer 代理通道时建立新连接,该通道不包含来自 /Reports 连接的 NTLM 身份验证信息。

我试过将 /Reports 和 /ReportServer 端点放在一个位置,但这没有帮助(我无法使重写正常工作)。

有什么想法吗?

好吧,经过几天的努力,我终于开始工作了。事实证明这不是 NGINX 设置,而是 SSRS 设置。在 rsreportserver.config 中,我必须进行以下设置(类似于自定义身份验证):

<Authentication>
    <AuthenticationTypes>
        <RSWindowsNTLM/>
    </AuthenticationTypes>
    <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel>
    <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario>
    <EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>

我的关键是将 RSWindowsExtendedProtectionLevel 设置为 Off,现在一切正常。