创建应用
新建一个Asp.net core Web API 应用
在program里指定监听端口
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Listen(IPAddress.Any, ); }) .Build();
在应用目录使用dotnet publish 发布文件
将发布的文件上传至CentOS里面
使用命令测试
dotnet WebApplication1.dll
打开浏览器:http://10.15.4.155:5000/api/values
配置反向代理
修改Nginx配置
vi /usr/local/nginx/conf/nginx.conf
添加反向代理
server { listen ; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $http_host; proxy_cache_bypass $http_upgrade; } }
重新启动Nginx
service nginx reload
打开浏览器:http://10.15.4.155:8001/api/values
在CentOS中,要想在不退出Web服务的情况下返回shell,可以按Ctrl+Z,此时如果想要关掉Web应用,可以先查找进程,然后杀掉
ps -ef | grep WebApplication1
netstat -anp|grep
kill -
配置SSL
使用OpenSSL生成证书
首先自己创建根证书 root 自己做CA也就是发行者。
openssl genrsa -des3 -out root.key
然后按照提示输入密码
openssl req -new -key root.key -out root.csr
输入刚才设置的密码,然后填写一些信息
然后创建一个10年期根证书 root.crt
openssl x509 -req -days -sha1 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
接下来创建服务器证书
openssl genrsa -des3 - openssl req -new -key server.key -out server.req openssl x509 -req -days -sha1 -extensions v3_req -CA root.crt -CAkey root.key -CAserial root.srl -CAcreateserial -in server.key -out server.crt
导出pfx格式
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx
将生成的server.pfx通过放到网站根目录下
修改Startup的ConfigureServices要求全局使用HTTPS
//配置使用HTTPS services.Configure<MvcOptions>(options => { options.Filters.Add(new RequireHttpsAttribute()); });
修改Configure
//HTTP重定向到HTTPS var options = new RewriteOptions().AddRedirectToHttps(); app.UseRewriter(options);
修改program代码
public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(options => { options.Listen(IPAddress.Any, ,listenOptions=> { listenOptions.UseHttps("server.pfx","test"); }); }) .Build();
重新发布到CentOS中,记得将证书也放到目录中
开启应用
打开浏览器
使用HTTP是无法打开的。
使用程序访问
static void Main(string[] args) { string url = "https://localhost/api/values"; using (HttpClient client = new HttpClient()) { ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; var response = client.GetAsync(url); Console.WriteLine(response.Result.Content.ReadAsStringAsync().Result); } Console.ReadKey(); }
当实际生产部署的时候就不用自签名证书了,一般SSL证书供应商都会提供几种格式的证书
这里选用IIS的就可以,一般在申请证书的时候如果使用了密码,那么生成的IIS证书里面就不带密码,如果申请的时候不使用密码,那么生成的IIS证书目录下会有个随机密码
将网站应用部署成服务
创建配置文件
vi /etc/systemd/system/hellomvc.service
编辑文件
[Unit] Description=Example .NET Web API App running on CentOS [Service] WorkingDirectory=/opt/WebWithSSL/ ExecStart=/usr/bin/dotnet /opt/WebWithSSL/WebApplication1.dll Restart=always RestartSec= # Restart service after seconds if dotnet service crashes SyslogIdentifier=dotnet-example User=root Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false [Install] WantedBy=multi-user.target
启用服务
systemctl enable hellomvc.service
启动服务
systemctl start hellomvc.service
查看服务状态
systemctl status hellomvc.service
这里的 /usr/bin/dotnet 是dotnet默认安装位置,后面的是网站应用的文件位置。