amazon-web-services - 为什么 X-Forwarded-Proto 在 Elas

设置

嗨。我正在将 ASP.Net Core 应用程序部署到 AWS Elastic Beanstalk。我运行的平台是 64 位 Amazon Linux 2/2.1.5,使用 Nginx 作为代理服务器软件。我在环境配置中为我的负载均衡器设置了一对监听器。它们的设置如下:

  • Port=443 Protocol=HTTPS SSL=certificate Process=default
  • Port=80 Protocal=HTTP Process=default

我有一个进程:

Name=default Port=80 Protocol=HTTPS

问题

在我的 ASP.Net Core 服务器上,我正在尝试检查服务器的原始客户端是通过 HTTPS 还是 HTTP 进行通信。据我了解,请求的 X-Forwarded-Proto header 应包含此信息。但是,无论客户端如何连接到服务器,X-Forwarded-Proto 的值始终是 http为什么 X-Forwarded-Proto 从未设置为 https,即使从我的网络浏览器连接时也是如此?

在此先感谢您的帮助!

最佳答案

@MarkB 指出问题出在 Nginx 配置中。 AWS Elastic Beanstalk 在 /etc/nginx/conf.d/elasticbeanstalk 中有一个默认配置文件 00_application.conf,这是罪魁祸首。它有一个声明:

proxy_set_header    X-Forwarded-Proto     $scheme;

需要更改为:

proxy_set_header    X-Forwarded-Proto     $http_x_forwarded_proto;

为了覆盖这个文件,我使用了这里详述的方法:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html .

我将文件 .platform/nginx/conf.d/elasticbeanstalk 添加到我已部署项目的根目录中。它包含:

location / {
    proxy_pass          http://127.0.0.1:5000;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;
    proxy_set_header    Upgrade               $http_upgrade;
    proxy_set_header    Connection            $http_connection;
    proxy_set_header    Host                  $host;
    proxy_set_header    X-Forwarded-For       $proxy_add_x_forwarded_for;
    proxy_set_header    X-Forwarded-Proto     $http_x_forwarded_proto;
}

我还必须向我的 ASP.Net Core 应用程序添加一个中间件,以使用此答案中指出的转发 header :Redirect URI sent as HTTP and not HTTPS in app running HTTPS .

我将以下内容添加到我的 Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    //...
    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor |
            ForwardedHeaders.XForwardedProto;
        options.KnownNetworks.Clear();
        options.KnownProxies.Clear();
    });
    //...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseForwardedHeaders();
    //...
}

我希望这对其他人有帮助!

关于amazon-web-services - 为什么 X-Forwarded-Proto 在 Elastic Beanstalk 上总是设置为 HTTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67570998/

相关文章:

c++ - 如何使函数能够接受原始指针作为迭代器?

c - 学习C——测试数据类型

kubernetes - 如何将 kubernetes 的一个 secret 值复制到同一 name

sql - 在 AWS Athena 中添加截止日期列

python-3.x - DistutilsError : Could not find suita

node.js - 如何使用 NestJS 为多个国家/地区编写调度程序 12 :00AM(will

javascript - 如何在一组 span 元素之后替换纯文本内容或文本节点?

visual-studio-code - 代码行数旁边的竖线是什么

haskell - 在 haskell 中给 `_` 一个类型签名

c++ - char a[n][m] 和 char a[][m] 有区别吗?