前言:
本篇文章主要讲解的是如何在 Linux CentOS7 操作系统搭建. NET Core 运行环境并发布 ASP.NET Core 应用程序, 以及配置 Nginx 反向代理服务器. 因为公司的项目一直都是托管在 Windows 服务器 IIS 上, 对于 Linux 服务器上托管. NET Core 项目十分好奇. 因为好奇, 因此就有了这篇文章关于如何在 Linux CentOS7 系统中配置. NET Core 运行环境, 部署项目和反向代理服务器的配置.
一, 开发工具介绍
Xshell:
是一个强大的安全终端模拟软件, 它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议. Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作.
Xftp:
是一个功能强大的 https://baike.baidu.com/item/SFTP , https://baike.baidu.com/item/FTP 文件传输软件. 使用了 Xftp 以后, MS Windows 用户能安全地在 https://baike.baidu.com/item/UNIX / https://baike.baidu.com/item/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 Runtime[安装. Net Core 运行环境] :
- sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
- sudo yum update
- sudo yum install aspnetcore-runtime-2.2
Install .NET Core SDK[安装. Net Core SDK] :
- sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
- sudo yum update
- sudo yum install dotnet-sdk-2.2
查看安装环境版本信息:
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 + 端口号进行访问, 访问成功, 页面如下图所示:
四, 配置 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 应用程序:
来源: https://www.cnblogs.com/Can-daydayup/p/10911067.html