配置 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,现在一切正常。
我正在尝试在另一台机器上使用 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,现在一切正常。