Kubernetes nginx-ingress 应用程序处理的入口控制器 CORS
Kubernetes nginx-ingress ingress controller CORS handled by application
我正在努力让 NGINX 从我的应用程序来回代理 CORS headers。允许的来源由我的 ASP.NET Web 应用程序指定,我想将这些 headers 代理回客户端。在 Kubernetes 外部运行的应用程序可以完美地处理 CORS headers,因此应用程序似乎已正确配置 CORS。据我所知,Kubernetes NGINX 入口控制器似乎不允许我这样做。
我想继续允许我的应用程序处理允许的来源,因此我只需要配置 NGINX 反向代理以传递所有 headers。查看文档 proxy_pass_request_headers
默认设置为 on
。我之前对 NGINX 的理解是,此配置设置是代理到另一台服务器时所必需的,以便 headers 向后和向前传递。
文档中概述的注释 enable-cors
和围绕 CORS 的各种配置选项对我没有多大用处,因为它们假设 Ingress Controller 是允许来源的真实来源。在我的情况下不是。
我原以为这是允许应用程序处理 CORS 的常见请求,但我正在努力寻找解决此问题的方法。
非常感谢任何人可以提供的任何帮助!
更新 - 添加图表
我根据我对这里拓扑的理解创建了一个小图表。这很可能是对过程的过度简化,但希望您能更容易地理解我想要实现的目标。
所以这实际上与我遇到的其他一些问题有关。毕竟 CORS headers 没有被剥离。在进行了大量调试后,我怀疑 CORS 模块没有在典型的 IIS 容器中配置。这是第一个问题。 https://github.com/microsoft/dotnet-framework-docker/issues/625
对于那些感兴趣的人,这里是用于使用 Chocolatey 添加 CORS 的 DockerFile 行:
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')); `
choco install iis-cors-module -y
Kubernetes NGINX 没有剥离 headers 并且确实在正常代理所有 headers。
如果其他人将来遇到类似问题,还有一些其他有趣的花絮:
- ASP.NET 应用程序真的不喜欢在反向代理后面。可能还有其他问题稍后会引起他们的注意,但首先他们会在返回 WebForms 页面时检查名为
IsSecureConnection
的 属性(大概 MVC 会发生类似的事情)。脚本通常被设置为匹配它假定的方案(http 而不是 https)。这会导致现代浏览器出错。为此请参阅以下 SO 帖子:Why am I suddenly getting a "Blocked loading mixed active content" issue in Firefox? How to add meta tag to ASP.Net content page
- 完成此操作后,如果您不幸将这些控件嵌入到您的站点中,我们就会有一些可爱的 Telerik 废话。 Telerik(Progress)以其无穷的智慧为他们的 HTTPS CDN 链接使用不同的 URL。哪个不能很好地升级。以下论坛帮助了我:https://www.telerik.com/forums/cdn-not-pulling-from-the-right-location-under-ssl
我正在努力让 NGINX 从我的应用程序来回代理 CORS headers。允许的来源由我的 ASP.NET Web 应用程序指定,我想将这些 headers 代理回客户端。在 Kubernetes 外部运行的应用程序可以完美地处理 CORS headers,因此应用程序似乎已正确配置 CORS。据我所知,Kubernetes NGINX 入口控制器似乎不允许我这样做。
我想继续允许我的应用程序处理允许的来源,因此我只需要配置 NGINX 反向代理以传递所有 headers。查看文档 proxy_pass_request_headers
默认设置为 on
。我之前对 NGINX 的理解是,此配置设置是代理到另一台服务器时所必需的,以便 headers 向后和向前传递。
文档中概述的注释 enable-cors
和围绕 CORS 的各种配置选项对我没有多大用处,因为它们假设 Ingress Controller 是允许来源的真实来源。在我的情况下不是。
我原以为这是允许应用程序处理 CORS 的常见请求,但我正在努力寻找解决此问题的方法。
非常感谢任何人可以提供的任何帮助!
更新 - 添加图表
我根据我对这里拓扑的理解创建了一个小图表。这很可能是对过程的过度简化,但希望您能更容易地理解我想要实现的目标。
所以这实际上与我遇到的其他一些问题有关。毕竟 CORS headers 没有被剥离。在进行了大量调试后,我怀疑 CORS 模块没有在典型的 IIS 容器中配置。这是第一个问题。 https://github.com/microsoft/dotnet-framework-docker/issues/625
对于那些感兴趣的人,这里是用于使用 Chocolatey 添加 CORS 的 DockerFile 行:
RUN Set-ExecutionPolicy Bypass -Scope Process -Force; `
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; `
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')); `
choco install iis-cors-module -y
Kubernetes NGINX 没有剥离 headers 并且确实在正常代理所有 headers。
如果其他人将来遇到类似问题,还有一些其他有趣的花絮:
- ASP.NET 应用程序真的不喜欢在反向代理后面。可能还有其他问题稍后会引起他们的注意,但首先他们会在返回 WebForms 页面时检查名为
IsSecureConnection
的 属性(大概 MVC 会发生类似的事情)。脚本通常被设置为匹配它假定的方案(http 而不是 https)。这会导致现代浏览器出错。为此请参阅以下 SO 帖子:Why am I suddenly getting a "Blocked loading mixed active content" issue in Firefox? How to add meta tag to ASP.Net content page - 完成此操作后,如果您不幸将这些控件嵌入到您的站点中,我们就会有一些可爱的 Telerik 废话。 Telerik(Progress)以其无穷的智慧为他们的 HTTPS CDN 链接使用不同的 URL。哪个不能很好地升级。以下论坛帮助了我:https://www.telerik.com/forums/cdn-not-pulling-from-the-right-location-under-ssl