简述
记录一下,第一次使用阿里云平台,之前是使用微软云,项目是.net 5的项目,涉及三个系统:工作台、SSO、系统管理,使用了阿里云的ECS Windows服务器,RDS,OSS,Redis,SLB
服务器配置
- 通过服务器管理器安装IIS,流程不写了,百度一下;
- 安装.net 5的运行时和SDK,下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet,根据自己使用的版本下载,标红框的是需要下载安装的,根据需要下载64或者86(86就是32);
项目发布并把文件搬到服务器
- 项目发布;
- 复制文件到服务器:可使用服务器上的workbench,我感觉不太好用,没有进度条,文件容易损坏,我是上传文件到OSS,然后分享链接下载,速度更快;
部署到IIS
- 新建网站,选择一下文件路径,因为使用的SLB解析域名,所以在服务器上不绑定证书,是http协议;
- CLR设置为无托管;
域名解析并转发到服务器
-
创建虚拟服务器组;
-
创建监听(因为我这个端口已经创建过了,所以报红);
-
创建http重定向到https的监听;
-
创建https:443的监听,在这个监听上配置转发,选择对应的虚拟服务器组;
-
遇到的一些问题(资源配置:两个环境给了两台服务器,一个SLB):
因为两个环境的站点都是一样的,尽量端口不要一致,因为一台LB的监听的端口号是唯一的。
如果调用域名http://test3.com:8013/api/login这样带端口的话,一定要增加对8013的监听,不然会报错。
遇到的一些问题解决
- 因为IIS上没有绑定证书,是http协议,如果在服务器中多个系统之间通过域名调用,会有https变成http的可能,所以要在SLB监听里加一个80转443的重定向;
- 因为SSO认证使用的是OIDC,遇到了重定向地址变成了http,找了好久,解决方法就是在SLB的转发中增加X-Forwarded-Proto真实协议的传递,然后在中间件中接收X-Forwarded-Proto传递的值来决定是否使用https
public static IApplicationBuilder UseCkeckConfigHttps(this IApplicationBuilder app)
{
var requireHttps = true;
var forwardedProtoHeaderName = "X-Forwarded-Proto";
//修复应用机上Discovery url(.well-known/openid-configuration)为IIS绑定的http,非转发过来的https请求的问题
var forwardOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto | ForwardedHeaders.XForwardedHost,
RequireHeaderSymmetry = false,
ForwardedProtoHeaderName = forwardedProtoHeaderName
};
forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
if (requireHttps)
{
app.UseHsts();
app.UseHttpsRedirection();
}
else
{
app.UseCookiePolicy();
}
return app;
}
上面两个问题的具体原因,可以看这篇文章:https://blog.csdn.net/weixin_40803011/article/details/121560609
3.如果有别的报错,看看事件查看器和检查log,欢迎评论区讨论