Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器
前言:
本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器。因为公司的项目一直都是托管在Window服务器IIS上,对于Linux服务器上托管.NET Core项目十分好奇。因为好奇,因此就有了这篇文章关于如何在Linux CentOS7系统中配置.NET Core运行环境,部署项目和反向代理服务器的配置。
一、开发工具介绍
Xshell:
是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。
Xftp:
是一个功能强大的SFTP、FTP 文件传输软件。使用了 Xftp 以后,MS Windows 用户能安全地在 UNIX/Linux 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲的功能特性。
当然这两个工具提供了非商业用途的免费使用权限,你只需要填写对应的信息即可。
下载地址:https://www.netsarang.com/en/free-for-home-school/
二、.NET Core环境搭建
环境下载地址:https://dotnet.microsoft.com/download
查看操作系统版本:
lsb_release -a

Install .NET Core SDK【安装.Net Core SDK】:
概述:.NET Core SDK 是一组库和工具,开发人员可用其创建 .NET Core 应用程序和库。
它包含以下用于构建和运行应用程序的组件:
.NET Core CLI 工具。
.NET Core 库和运行时。
DotNet 驱动程序(https://docs.microsoft.com/zh-cn/dotnet/core/tools/index?tabs=netcore2x#driver)。
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm sudo yum install dotnet-sdk-2.2
官网最新安装教程:
https://dotnet.microsoft.com/download/linux-package-manager/centos7/sdk-current

查看安装环境版本信息:
dotnet --info

三、项目发布并部署到CentOS服务器中
使用Visual Studio发布项目:
部署方式选择框架依赖
原因:因为前面我们已经安装好了.Net Core应用程序运行所需要的运行环境和对应的SDK了。
目标运行时选中可移植的
原因:可以适用所有操作系统。

将发布好的文件使用xftp上传到服务器:

使用xshell查看项目是否上传成功:

运行项目:
首先要进入项目目录:
cd MyDotNetApplication/
运行项目:
dotnet FirstCore.dll -d &

查看后台是否能够运行:
wget http://localhost:5000
或者
curl http://localhost:5000

运行程序提示问题:
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
出现这个警告的话,IPV6s回送的时候不可达,也就是说你只能够在服务器内部通过本地访问,但是无法通过外网ip对网站进行访问。
解决方法:
首先停止网站:
查看运行程序端口:jobs -l 结束当前程序:kill 端口号 重新运行程序,最后设置如下访问方式【当然这样子做只是为了看运行效果,下面我们需要配置Nginx以及守护服务】:
dotnet FirstCore.dll --server.urls="http://*:5000"
然后在输入外网ip+5000端口号进行访问,访问成功,页面如下图所示:

四、配置Nginx反向代理:
使用反向代理服务器的优势:
Kestrel 非常适合从 ASP.NET Core 提供动态内容。 但是,Web 服务功能不像服务器(如 IIS、Apache 或 Nginx)那样功能丰富。 反向代理服务器可以卸载 HTTP 服务器的工作负载,如提供静态内容、缓存请求、
压缩请求和 HTTPS 终端。 反向代理服务器可能驻留在专用计算机上,也可能与 HTTP 服务器一起部署。
反向代理服务器接收来自网络的 HTTP 请求,并将这些请求转发到 (边缘服务器)Kestrel,请求流程图如下所示:

下载、安装、启动Nginx命令:
首先添加CentOS 7 EPEL源:
sudo yum install epel-release
(拓展)添加EPEL源的作用:
EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区打造的、为 RHEL 及其衍生发行版(如 CentOS 等)提供高质量软件包的项目。安装了 EPEL 源之后,就像在 Fedora 上一样,通过“yum install 软件包名”,即可安装很多之前需要编译安装的软件、常用的软件以及一些比较流行的软件,比如现在流行的 nginx、redis 等。安装了EPEL源之后,都可以使用 EPEL 很方便的安装更新。
使用以下yum命令安装Nginx :
sudo yum install nginx
因为是首次安装 Nginx,通过运行以下命令显式启动:
sudo service nginx start
或者:
sudo systemctl start nginx
查看Nginx是否启动:
查看Nginx的运行状态:
systemctl status nginx

用ps -ef列出进程列表,然后通过grep过滤nginx:
ps -ef | grep nginx

设置系统启动时启用Nginx:
sudo systemctl enable nginx
查看系统防火墙状态:
service iptables status
如下图所示我的防火墙是关闭的:

如果系统中的防火墙未关闭,请输入以下命令来允许 HTTP 和 HTTPS 通信:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
在浏览器中输入服务器的 IP 地址:http://123.xx.xx.88/来验证 Nginx 是否成功运行:
如下图所示能看到 Nginx 的默认转发网页则说明Nginx运行成功了:
修改 Nginx 配置文件:
使用Vim命令打开Nginx默认配置:
若要将 Nginx 配置为反向代理服务器用来将请求转接到 ASP.NET Core 应用,请修改Nginx的默认配置文件 /etc/nginx/nginx.conf 在文本编辑器中打开它,并将内容替换为以下内容:
vim /etc/nginx/nginx.conf
将原server中的默认配置内容替换成以下内容:

替换的内容:
server {
listen 80;
server_name example.com *.example.com;
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 $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
保存编辑,并退出文本编辑器:
esc+:wq 保存修改并退出vim编辑器
验证Nginx的默认文件配置是否正确:
nginx -t
查看端口在实例中是否正常被监听:
netstat -an | grep 80

重启Nginx:
nginx -s reload
最后直接通过服务器ip地址访问ASP.NET Core应用程序:
提示502 Bad Gateway:

原因:Linux CentOs中的项目没有运行!
到对应的项目目录,运行项目,输入以下命令:
进入项目目录:
cd MyDotNetApplication/ 运行项目:
dotnet FirstCore.dll -d &
再次访问服务器Ip,项目成功运行:


五、配置Supervisor守护服务:
为什么要配置Supervisor:
使用Linux部署过ASP.NET Core应用程序的小伙伴都清楚,我们在部署项目都是通过Shell进行项目启动运行的。有时候我们会发现当我们关闭了Shell后,应用程序会立马宕机无法访问,需要我们重新进入服务器连接Shell输入dot命令重启应用程序。在生成环境中对于这种没有对应用程序进行任何的守护和监听的部署是非常的糟糕的,因此我们需要守护服务或者容器(推荐使用Docker)来对应用程序进行监听保护作用,当监听到应用进程停止,Supervisor会自动重启该应用程序。
Supervisor简单概述:
首先简单了解下Supervisor, Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
安装Supervisor:
yum install python-setuptools easy_install supervisor
配置Supervisor
//新建指定目录,为了避免默认配置会在某些更新覆盖掉
mkdir /etc/supervisor //这里是在新建好的目录新建conf文件,这里关键。默认文件会建立在/etc目录下
echo_supervisord_conf > /etc/supervisor/supervisord.conf
新建成功如下图所示:

打开supervisord.conf,要将文件的结尾部分替换掉以便后面能读取到我们的配置文件
打开supervisord.conf配置文件:
vim supervisord.conf
在文件的结尾找到以下配置代码:
;[include]
;files = relative/directory/*.ini

将代码替换为如下,注意前后不能带 ;和空格符号
[include]
files = conf.d/*.conf

配置对ASP.NET Core应用的守护:
进入目录 /etc/supervisor/ 新建 conf.d文件夹:
mkdir conf.d
在【/etc/supervisor/conf.d/】目录下新建一个AspNetCoreWebApi.conf配置文件:
vim AspNetCoreWebApi.conf
直接复制以下内容:
[program:AspNetCoreWebApi]
command=dotnet FirstCore.dll;
directory=/root/MyDotNetApplication/;
autorestart=true;
stderr_logfile=/var/log/AspNetCoreWebApi.err.log;
stdout_logfile=/var/log/AspNetCoreWebApi.out.log;
environment=ASPNETCORE_ENVIRONMENT=Production;
user=root;
stopsignal=INT;
配置说明:
[program:AspNetCoreWebApi]
command=dotnet FirstCore.dll; 运行程序的命令
directory=/root/MyDotNetApplication/; 命令执行的目录
autorestart=true; 程序意外退出是否自动重启
stderr_logfile=/var/log/AspNetCoreWebApi.err.log;错误日志文件
stdout_logfile=/var/log/AspNetCoreWebApi.out.log;输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production;进程环境变量
user=root;进程执行的用户身份
stopsignal=INT
注意:如果服务已启动,修改配置文件可用“supervisorctl reload”命令来使其生效。
运行supervisord,查看是否生效,命令如下:
supervisord -c /etc/supervisor/supervisord.conf ps -ef | grep AspNetCoreWebApi //AspNetCoreWebApi是上面配置的program名称:[program:AspNetCoreWebApi]
配置Supervisor开机启动
新建一个“supervisord.service”文件
[Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf ExecStop=/usr/bin/supervisorctl shutdown ExecReload=/usr/bin/supervisorctl reload KillMode=process Restart=on-failure RestartSec=42s [Install] WantedBy=multi-user.target
将supervisord.service文件拷贝至:
/usr/lib/systemd/system/ #系统目录下
执行命令:systemctl enable supervisord #激活开机启动命令
执行命令:systemctl is-enabled supervisord #来验证是否为开机启动
下面是一些常用的 Supervisor 的命令 (参考https://segmentfault.com/a/1190000003955182):
| 命令 | 说明 |
|---|---|
| supervisord | 初始启动Supervisord,启动、管理配置中设置的进程 |
| supervisorctl stop myproject | 停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon |
| supervisorctl start myproject | 启动某个进程 |
| supervisorctl restart myproject | 重启某个进程 |
| supervisorctl stop groupworker | 重启所有属于名为groupworker这个分组的进程(start,restart同理) |
| supervisorctl stop all | 停止全部进程,注:start、restart、stop都不会载入最新的配置文件 |
| supervisorctl reload | 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程 |
| supervisorctl update | 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。注意:显示用stop停止掉的进程,用reload或者update都不会自动重启 |
Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器的更多相关文章
- 尝试在Linux上部署Asp.net Core应用程序
快两个月没接触.net,倒是天天在用Linux,所以想尝试一下在Linux运行喜欢的.net 应用. 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 ...
- centos7部署asp.net core 应用程序
一.运行环境 1.腾讯云与主机一台 2.操作系统是centos7 3.安装.net core sdk 4.安装node及其pm2(安装过程) rpm -Uvh https://packages.mic ...
- CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序
本文于2019年04月10日将标题「CentOS7 部署 ASP.NET Core应用程序」修改为「使用 Nginx 在 Linux 上托管 ASP.NET Core 应用程序」. 环境准备 VMwa ...
- 【转载】CentOS 7部署ASP.NET Core应用程序
看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡,直接进入正题.您有任何问题请在评论区留言. 1.环境 ...
- 【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 【详细】【转】CentOS 7部署ASP.NET Core应用程序
很早就看过关于net core部署在Linux上的文章,自己也曾亲自将项目部署在Linux上,今天看到这篇文章,为其格式之工整而转! 1.环境准备 网上看了一下,Linux云服务器还挺贵的,那就只好先 ...
- 阿里云CentOS7部署ASP.NET Core
本文主要介绍了阿里云CentOS7下如何成功的发布ASP.Core应用并使用nginx进行代理, 并对所踩的坑加以记录; 环境.工具.准备工作 服务器:阿里云64位CentOS 7.4.1708版本; ...
- 部署ASP.NET Core应用程序在CentOS 7
CentOS 7部署ASP.NET Core应用程序 看了几篇大牛写的关于Linux部署ASP.NET Core程序的文章,今天来实战演练一下.2017年最后一个工作日,提前预祝大家伙元旦快乐.不扯淡 ...
随机推荐
- php 正则判断是否是手机号码 最新
php 正则判断是否是手机号码 最新 标签: php正则 2013-09-22 14:31 55076人阅读 评论(1) 收藏 举报 分类: php(42) 版权声明:本文为博主原创文章,若转载请 ...
- Mysql高手系列 - 第19篇:mysql游标详解,此技能可用于救火
Mysql系列的目标是:通过这个系列从入门到全面掌握一个高级开发所需要的全部技能. 这是Mysql系列第19篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符 ...
- 【柠檬班】史上最简单的Jmeter跨线程组取参数值的两种办法(不写代码)【原创】
如果你工作中已经在用jmeter做接口测试,或性能测试了,你可能会遇到一个麻烦,哪就是jmeter的变量值不能跨线程组传递. 看,官方就已经给出了解释.这个不是jmeter的缺陷,这是jmeter ...
- Dubbo和Zookerper的关系
1.Dubbo的作用 Dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和服务提供者需要调度,dubbo提供一个框架解决这个问题.Dubbo基于RPC(Remote Procedur ...
- 从单片机到操作系统⑦——深入了解FreeRTOS的延时机制
>没研究过操作系统的源码都不算学过操作系统 # FreeRTOS 时间管理 时间管理包括两个方面:系统节拍以及任务延时管理. ## 系统节拍: 在前面的文章也讲得很多,想要系统正常运行,那么时钟 ...
- 04-12 scikit-learn库之随机森林
目录 scikit-learn库之随机森林 一.RandomForestClassifier 1.1 使用场景 1.2 代码 1.3 参数 1.4 属性 1.5 方法 二.RandomForestRe ...
- github仓库添加MIT许可
俩种方法 1.新建仓库 直接在选择添加即可如下图: 2.为已创建仓库后添加MIT协议 直接在给工程根目录添加LICENSE文件提交即可,内容是 MIT License Copyright (c) 年份 ...
- 分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离
分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论 ...
- Kubernetes网络分析之Flannel
Flannel是cereos开源的CNI网络插件,下图flannel官网提供的一个数据包经过封包.传输以及拆包的示意图,从这个图片中可以看出两台机器的docker0分别处于不同的段:10.1.20.1 ...
- Java性能优化的小细节
性能优化实现方式(单纯考虑代码层面): 1.减小代码体积 2.提高运行效率 如何做: 1.尽量指定类.方法的final修饰符 带有final修饰的类是不可派生的,该类所有的方法都是final的,jav ...