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

我创建了一个运行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

基础教程推荐