带有SSL和Asp.NET核心API的Nginx反向代理。

问题描述 投票:1回答:1

我目前正在尝试建立一个客户端界面与服务器交互的API,我决定使用ASP.NET Core作为API,Nginx作为托管平台。我决定使用ASP.NET Core作为API,Nginx作为托管平台(在Ubuntu 18.04上)。由于ASP.NET使用的是Kestrel,所以我们设置了一个反向代理,将Nginx的请求转发到Kestrel--也就是API的托管平台。我们在NGINX服务器上设置了SSL,但是在Kestrel服务器上没有设置。

简单地说,我不知道如何在Kestrel服务器上设置SSL,并在NGINX端设置另一层SSL。我怎么才能做到这一点呢?

模型:客户端 --> GET请求通过HTTPS --> NGINX与SSL --> HTTP Kestrel服务器,反之亦然。

輸出:SSL_PROTOCOL_ERROR SSL_PROTOCOL_ERROR

临时解决方案。在链接中使用HTTP 5000端口 -- 没有错误,但是,数据不安全。

最佳的解决方案:使用HTTPS,链接中不含5000端口。使用HTTPS,链接中不含5000端口。数据是安全的。

NGINX配置。

    if ($host = api.OURSITENAME.co) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    listen 80;
    server_name api.OURSITENAME.co;
    return 301 https://$server_name$request_uri;


}

server {
    listen 443 ssl http2;
    include /etc/nginx/proxy_params;
    server_name api.OURSITENAME.co;
    access_log /var/log/nginx/api.access.log;
    error_log /var/log/nginx/api.error.log error;
    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/api.OURSITENAME.co/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/api.OURSITENAME.co/privkey.pem; # managed by Certbot
    proxy_http_version 1.1;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header Connection $http_connection;
    proxy_set_header Upgrade $http_upgrade;

    location / {
        proxy_pass         http://172.18.0.2:5000; <-- Docker Container. Can easily be switched out with localhost if we want to run on dotnet directly.
    }
}
asp.net asp.net-core ssl nginx reverse-proxy
1个回答
0
投票

根据我的理解,当你使用HTTP直接在5000端口访问你的应用程序时,你会得到一个SSL错误。即使你不使用HTTPS。

如果您有 app.UseHsts();app.UseHttpsRedirection(); 中的代码,那么它将使用HTTPS。

如果你让nginx来处理SSL,那么你可以从你的应用程序Startup.cs中删除以下代码

典型的启动代码。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else // Production
    {
        app.UseExceptionHandler("/Error");
        // Remove to use HTTP only
        app.UseHsts(); // HTTPS Strict mode
    }

    // Remove to use HTTP only
    app.UseHttpsRedirection(); // Redirects HTTP to HTTPS
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseAuthentication();

    app.UseMvc();

}

关于在dotnet core中执行SSL的文档

© www.soinside.com 2019 - 2024. All rights reserved.