gpt4 book ai didi

c# - 如何使用 ASP.NET Core 和 nginx 强制执行 SSL

转载 作者:太空狗 更新时间:2023-10-30 00:49:03 26 4
gpt4 key购买 nike

我启动了一个运行 Ubuntu 16.04 的新虚拟机并运行了命令。 dotnet new -t web 创建一个新的基本 MVC web 模板。接下来我运行应用程序,连接成功。

之后我修改了 nginx.conf 以使用 SSL

server {
listen 443 http2 ssl default;

ssl_certificate /etc/ssl/certs/testCert.crt;
ssl_certificate_key /etc/ssl/certs/testCert.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;

location / {
proxy_pass http://localhost:5000;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

}
}

再次运行应用程序,它在 HTTPS 下运行,没有错误。

然后我在 Startup.cs 中配置 MVC 服务以强制执行 HTTPS。

services.AddMvc(config =>
{
config.Filters.Add(new RequireHttpsAttribute());
});

最后,我再次尝试连接,但得到了 ERR_TOO_MANY_REDIRECTS。但是,如果我只在 Kestrel 上运行并配置一些选项,它就可以正常工作。

services.Configure<KestrelServerOptions>(options =>
{
options.AddServerHeader = false;
options.UseHttps("devcert.pfx", "password");
});

看起来一定是 nginx,但它可能是 MVC/ASP.NET Core 的问题。如何进一步诊断或修复此问题?

最佳答案

您的 SSL 连接终止为 nginx,它以普通 http 与 Kestrel 通信。 Kestrel 将用户重定向到 https,它在 nginx 中再次终止,作为 http 传递给 Kestrel,一次又一次。这是无限循环。

配置 nginx 要求 https(将 http 重定向到 https),不要碰 Kestrel。您的站点本身将始终在没有 SSL 的情况下工作,而 nginx 将使用 SSL 将其传送给用户(并返回)。

关于c# - 如何使用 ASP.NET Core 和 nginx 强制执行 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41060749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com