我启动了一个运行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,https再次终止于nginx,一次又一次地传递给Kestrel。那是无尽的循环。
将nginx配置为要求使用https(将http重定向到https),请勿触摸Kestrel。您的网站本身始终可以在没有SSL的情况下正常工作,nginx会使用SSL将其交付给用户(和向用户提供)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句