Kubernetes nginx入口控制器CORS由应用程序处理

Kubernetes nginx入口控制器CORS由应用程序处理,nginx,iis,kubernetes,cors,windows-container,Nginx,Iis,Kubernetes,Cors,Windows Container,我正在努力让NGINX从我的应用程序来回代理CORS头。允许的来源由我的ASP.NET Web应用程序指定,我希望将这些头代理回客户端。在Kubernetes外部运行的应用程序可以完美地处理CORS头,因此应用程序似乎正确配置了CORS。据我所知,Kubernetes NGINX ingress控制器似乎不允许我这样做 我想继续允许我的应用程序处理允许的来源,因此我只需要配置NGINX反向代理来传递所有头。查看文档,默认情况下,proxy\u pass\u request\u headers设置

我正在努力让NGINX从我的应用程序来回代理CORS头。允许的来源由我的ASP.NET Web应用程序指定,我希望将这些头代理回客户端。在Kubernetes外部运行的应用程序可以完美地处理CORS头,因此应用程序似乎正确配置了CORS。据我所知,Kubernetes NGINX ingress控制器似乎不允许我这样做

我想继续允许我的应用程序处理允许的来源,因此我只需要配置NGINX反向代理来传递所有头。查看文档,默认情况下,
proxy\u pass\u request\u headers
设置为
on
。我以前对NGINX的理解是,当代理到另一台服务器时,为了使头能够前后传递,需要使用此配置设置

注释
启用cors
和文档中概述的cors周围的各种配置选项对我来说用处不大,因为它们假设入口控制器是允许来源的真实来源。就我而言,事实并非如此

我本以为这是一个允许应用程序处理CORS的常见请求,但我很难找到解决此问题的方法

非常感谢任何人能提供的任何帮助

更新-添加图表 我创建了一个小图表,其中包含了我对拓扑的理解。这可能是一个过于简单的过程,但希望你能理解我试图实现更容易。
所以这实际上与我遇到的其他一些问题有关。毕竟,CORS头并没有被剥离。我怀疑在进行了大量调试之后,CORS模块没有在典型的IIS容器中配置。这是第一个问题

对于那些感兴趣的人,这里有DockerFile行,用于添加CORS with Chocolate:

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并没有剥离头文件,事实上,它正常代理了所有头文件

如果将来有其他人遇到类似问题,还有一些有趣的小道消息:

  • ASP.NET应用程序确实不喜欢使用反向代理。可能还有其他问题会在稍后引起他们的注意,但首先,当返回WebForms页面时,他们会检查名为
    IsSecureConnection
    的属性(可能MVC也会发生类似的情况)。脚本通常被设置为与它假定的方案相匹配(http而不是https)。这会在现代浏览器中导致错误。有关此信息,请参阅以下SO帖子:
  • 在你做了这些之后,如果你运气不好,在你的网站上嵌入了这些控件,那么我们会有一些可爱的Telerik胡说八道。Telerik(Progress)以其无限的智慧为HTTPS CDN链接使用不同的URL。这不能很好地升级。以下论坛在这里帮助了我:

您能否分享如何在NGINX入口控制器中设置cors标头?尝试设置访问控制允许原点:*。不幸的是,你可以引用这个链接@JalpaPanchal,这意味着我的应用程序对我的用户没有保护。我已经发现了问题所在,并将下面的答案留给感兴趣的人!