使用Nginx在Centos上托管ASP.NET Core程序
微软的文档:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/linux-nginx?tabs=aspnetcore2x
1. 安装.NET Core Sdk
1.1微软官方安装说明:https://www.microsoft.com/net/learn/get-started/linux/centos
注册微软密钥和产品提要
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
1.2 安装.NET SDK
sudo yum update sudo yum install libunwind libicu sudo yum install dotnet-sdk-2.1.4
注意:其中sdk的版本要版本一定要更程序用到的相同否则在运行程序时候会出现在不到依赖项的情况
上述命令要单条执行 ,因为在执行后会有个提示是否ok,需要输入y否则安装不上
2. 把程序复制到服务器上
我是用的winScp工具上传的服务器,
提前创建好目录 /var/aspnetcore/hellomvc,直接用该工具创建如下图红框的按钮
上传程序
测试下程序是否能正常运行
输入命令: dotnet WebApplication1.dll
WebApplication1.dll这个是你自己程序集的名称,如果出现 Application started说明启动成功,可以在服务器上访问网站的地址了我程序中监听的地址是http://127.0.0.1:5000。
访问地址出现你网站的html说明部署成功。成功后用 Ctrl+C关闭程序
3. 安装Ngnix
3.1 安装gcc
yum install gcc-c++
3.2 PCRE pcre-devel 安装
yum install -y pcre pcre-devel
3.3 zlib 安装
yum install -y zlib zlib-devel
3.4 OpenSSL 安装
yum install -y openssl openssl-devel
3.5 下载
wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
3.6 解压
tar -zxvf nginx-1.10.1.tar.gz
3.8 切换到文件夹到解压的目录
cd nginx-1.10.1
3.9 设置配置
./configure
3.10 编译安装
make make install
找到安装路径 whereis nginx
3.11 转到安装目录启动
cd /usr/local/nginx/sbin/
./nginx
./nginx -s stop
./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s reload 此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
查询nginx进程: ps aux|grep nginx
4. 配置Nginx把请求转到给ASP.Net Core中的 Kestrel 处理请求
找到nginx的安装路径,找到配置文件 nginx.conf,右键编辑
替换成下面内容
server { listen 80; 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; } }
如下图
修改了配置后需要先价差配置是否正确
命令: sudo nginx -t
然后重新加载配置
命令: sudo nginx -s reload
5. 创建服务
通过上面提到的 dotnet WebApplication1.dll 命令的方式启动网站,然后访问nginx监听的80端口 就可以直接访问到了,这个访问就是请求先到达ngnix,然后被转发给了kestrel服务器
虽然这样可以访问,但是存在一个问题,当服务器重启后,网站会被关闭,需要手动的再次执行dotnet命令启动网站,那么如果做到让网站在服务器启动后能自动重启昵,解决的方法是把网站制作成一个服务,这样就能开启就启动了。
5.1 创建服务定义文件
创建一个空文件名字叫 kestrel-hellomvc.service ,通过WinSCP上传到服务器中
然后右键编辑文件内容如下
[Unit] Description=Example .NET Web API App running on centos [Service] WorkingDirectory=/var/aspnetcore/hellomvc ExecStart=/usr/bin/dotnet /var/aspnetcore/hellomvc/WebApplication1.dll Restart=always RestartSec=10 # Restart service after 10 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
WorkingDirectory表示你的网站放置的目录
ExecStart表示用dotnet命令来启动你的网站WebApplication1.dll
User表示你服务器用户名,要保证该用户存在并且具有执行程序的权限
5.2 启动服务
systemctl enable kestrel-hellomvc.service systemctl start kestrel-hellomvc.service systemctl status kestrel-hellomvc.service
这样再次访问网站就可以了