.NET国产化改造探索(五)、结合Nginx并确保.NET应用程序自动启动

随着时代的发展以及近年来信创工作和...废话就不多说了,这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来,看操作。

上一篇介绍了如何在银河麒麟操作系统上安装Nginx,这篇文章详细介绍下在银河麒麟操作系统上,使用Nginx+.NET程序实现自启动。

回顾一下之前的文章,.NET程序运行,我们使用下面的命令:

bash 复制代码
dotnet WebAPI.dll

这时我们可以看到,程序的端口号是5000,上一篇文章也说到,Nginx默认端口是80,这时我们会将Nginx配置为反向代理,以便将端口80上发出的请求路由到侦听端口5000的ASP.NET Core应用程序。

接下来,我们切换到/usr/local/nginx/conf目录,编辑nginx.conf文件。

将下面的配置放到location /配置中

bash 复制代码
proxy_pass         http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header   Upgrade $http_upgrade;
proxy_set_header   Connection $connection_upgrade;
proxy_set_header   Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header   X-Forwarded-Proto $scheme;

保存退出编辑。

将下面的配置放到http

bash 复制代码
map $http_connection $connection_upgrade {
    "~*Upgrade" $http_connection;
    default keep-alive;
  }

完成这些配置后,重启nginx

bash 复制代码
systemctl restart nginx

重启nginx后,我们需要马不停蹄的回到.NET的目录中,应该是这样的:

bash 复制代码
cd /var/www
ls
dotnet WebAPI.dll

程序将会启动,如下图:

这时,打开浏览器,输入IP地址。一切正常。

这说明配置的反向代理生效了,接下来,就是如何使.NET程序自动启动了。

到目前为止,Nginx和.NET程序已经可以协同工作了,Nginx侦听80端口,并将请求路由到侦听端口为5000的.NET应用程序,但每次重启服务器或者是退出Shell客户端,都必须手动重启.NET应用程序,这不是实际的解决办法,因此,我们需要进一步配置,以便应用程序可以自动启动。

在Windows上,使用IIS作为代理来运行.NET应用,IIS相关模块会确保.NET程序会自动启动,在Linux上可以吗?也是可以的,我们可以通过 supervisor来守护进程,也可以使用.service服务文件来实现.NET程序自动启动。

我使用.service服务文件实现程序自动启动。回想上一篇文章,在/etc/systemd/system目录下,创建过一个nginx.service来实现Nginx自动启动,我们再回到这个目录,创建一个webapi.service来实现.NET程序的自动启动,废话不多说,开干。

首先创建一个www用户并设置一个密码

bash 复制代码
useradd www
passed www

注意:www账户只是一个服务账户,在系统中并没有太大意义,所以为了安全,防止该账户登录是有意义的。使用下面的命令禁止该账户通过SSH 以交互方式登录到系统。
sudo usermod -s /usr/sbin/nologin www

设置完成后,使用下面命令查看账户状态

bash 复制代码
cat /etc/passwd | grep www

可以看到,www用户无法使用 SSH 以交互方式登录系统了。

接下来,使用下面的命令,创建webapi.service

bash 复制代码
cd /etc/systemd/system
vim webapi.service

将下面的配置放到webapi.service中。

bash 复制代码
[Unit]
Description=Example .NET Web API App running on Kylin Linux

[Service]
WorkingDirectory=/var/www
ExecStart=/root/dotnet/dotnet /var/www/WebAPI.dll
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

解释下参数:
WorkingDirectory 是发布应用程序的目录。
ExecStart 是启动应用程序的实际命令(必须使用绝对路径)。
Restart=always 如果由于某种原因(无论是手动还是由于崩溃)而停止,则自动启动。
RestartSec=10 进程停止后,10 秒后自动启动。
SyslogIdentifier 很重要。 它表示"系统日志标识符"。 有关守护程序的信息记录在此名称下的系统日志中。 还可以使用此标识符查找进程的 PID。

User 是管理服务的用户。 它应存在于系统中,并具有相应权限。

创建成功后,保存退出。

使用下面的命令,启动服务

bash 复制代码
 systemctl start webapi.service

使用下面的命令查看下当前状态

bash 复制代码
 systemctl status webapi.service

看到服务已经启动了。返回浏览器,访问下我们的WebAPI服务。

可以正常访问了。

到目前为止,服务正在运行但还未启用,通过下面的命令确保启动服务

bash 复制代码
systemctl enable webapi.service

致此,操作系统层面的问题已经全部完成了。接下来的文章,透过一个完整权限管理系统,来进一步探索国产化。

相关推荐
令狐少侠20114 小时前
ai之对接电信ds后端服务,通过nginx代理转发https为http,对外请求,保持到达第三方后请求头不变
nginx·ai·https
SEO-狼术11 小时前
Highcharts Dashboards provides crack
.net
小码编匠15 小时前
C# 上位机开发怎么学?给自动化工程师的建议
后端·c#·.net
cdbqss115 小时前
VB.net编写的身份证类
前端·.net
ChaITSimpleLove15 小时前
.NET9 实现字符串拼接(StringConcatenation)性能测试
.net·性能测试·字符串拼接·csharp·string 拼接·benchmarktest
小码编匠1 天前
WPF 自定义分页控件,可通过样式模板修改外观
后端·c#·.net
ajassi20001 天前
开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用
linux·开源·c#·mvc·.net
Eiceblue1 天前
【免费.NET方案】CSV到PDF与DataTable的快速转换
开发语言·pdf·c#·.net
DuelCode1 天前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
步、步、为营1 天前
.net开源库SignalR
开源·.net