我创建了一个运行Ubuntu 16.04的新VM并运行该命令. dotnet new -t web,它创建了一个新的基本MVC Web模板.接下来我运行了应用程序,连接成功.之后我修改了nginx.conf以使用SSLserver {listen 44...

我创建了一个运行Ubuntu 16.04的新VM并运行该命令. 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


基础教程推荐
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C#中 Json 序列化去掉null值的方法 2022-11-18
- Unity shader实现高斯模糊效果 2023-01-16
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- 实例详解C#实现http不同方法的请求 2022-12-26
- C# 解析XML和反序列化的示例 2023-04-14
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- C#中的Linq to JSON操作详解 2023-06-08