Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务 (上)

简介: Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器和Supervisor守护服务

前言:

  本篇文章主要讲解的是如何在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:

  是一个功能强大的SFTPFTP 文件传输软件。使用了 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

1336199-20190523115257697-816587575.png

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

 image.png

查看安装环境版本信息:

dotnet --info

1336199-20190523140035919-2057699361.png

三、项目发布并部署到CentOS服务器中

使用Visual Studio发布项目:

部署方式选择框架依赖

原因:因为前面我们已经安装好了.Net Core应用程序运行所需要的运行环境和对应的SDK了。

目标运行时选中可移植的

原因:可以适用所有操作系统。

1336199-20190523142020966-192112159.png

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

1336199-20190523144622682-685701545.png

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

1336199-20190523144818722-849684953.png

运行项目:

首先要进入项目目录:

cd MyDotNetApplication/

运行项目:

dotnet FirstCore.dll -d &

1336199-20191105010045055-507708187.png

查看后台是否能够运行:

wget http://localhost:5000

或者

curl  http://localhost:5000

1336199-20191105010141116-2147305880.png

运行程序提示问题:

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端口号进行访问,访问成功,页面如下图所示:

1336199-20191107004245443-59137680.png

四、配置Nginx反向代理:

使用反向代理服务器的优势:

Kestrel 非常适合从 ASP.NET Core 提供动态内容。 但是,Web 服务功能不像服务器(如 IIS、Apache 或 Nginx)那样功能丰富。 反向代理服务器可以卸载 HTTP 服务器的工作负载,如提供静态内容、缓存请求、

压缩请求和 HTTPS 终端。 反向代理服务器可能驻留在专用计算机上,也可能与 HTTP 服务器一起部署。

反向代理服务器接收来自网络的 HTTP 请求,并将这些请求转发到 (边缘服务器)Kestrel,请求流程图如下所示:

1336199-20191105004749667-268734595.png

下载、安装、启动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 

1336199-20191105014530324-1449477469.png

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

ps -ef | grep nginx

1336199-20191105012727327-1382737468.png

设置系统启动时启用Nginx:

sudo systemctl enable nginx

查看系统防火墙状态:

service iptables status

如下图所示我的防火墙是关闭的:

1336199-20191105013515340-1293846687.png

如果系统中的防火墙未关闭,请输入以下命令来允许 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运行成功了:

1336199-20190527152023864-588424458.png

修改 Nginx 配置文件:

使用Vim命令打开Nginx默认配置:

若要将 Nginx 配置为反向代理服务器用来将请求转接到 ASP.NET Core 应用,请修改Nginx的默认配置文件 /etc/nginx/nginx.conf 在文本编辑器中打开它,并将内容替换为以下内容:

vim /etc/nginx/nginx.conf

将原server中的默认配置内容替换成以下内容:

1336199-20191106232951664-1328003900.png

替换的内容:

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

1336199-20191106013121028-1785174697.png

查看端口在实例中是否正常被监听:

netstat -an | grep 80

1336199-20191106233830955-290948067.png

重启Nginx:

nginx -s reload

最后直接通过服务器ip地址访问ASP.NET Core应用程序:

提示502 Bad Gateway:


 1336199-20191107002511784-376271472.png

 

原因:Linux CentOs中的项目没有运行!

到对应的项目目录,运行项目,输入以下命令:
进入项目目录:
cd MyDotNetApplication/ 
运行项目:
dotnet FirstCore.dll -d &

再次访问服务器Ip,项目成功运行:

1336199-20191107004553166-138052234.png

1336199-20191107005727350-1144120025.png

相关文章
|
6月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
544 1
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
361 18
|
6月前
|
Ubuntu 安全 应用服务中间件
详细指南:配置Nginx服务器在Ubuntu平台上
以上步骤涵盖了基本流程:从软件包管理器获取 Ngnix, 设置系统服务, 调整UFW规则, 创建并激活服务器块(也称作虚拟主机), 并进行了初步优化与加固措施。这些操作都是建立在命令行界面上,并假设用户具有必要权限(通常是root用户)来执行这些命令。每个操作都有其特定原因:例如,设置开机启动确保了即使重启后也能自动运行 Ngnix;而编辑server block则定义了如何处理进入特定域名请求等等。
555 17
|
7月前
|
数据建模 应用服务中间件 PHP
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
本示例演示如何通过Docker挂载同一宿主目录至Nginx与PHP容器,实现PHP项目运行环境配置。需注意PHP容器中监听地址修改为0.0.0.0:9000,并调整Nginx配置中fastcgi_pass指向正确的IP与端口。同时确保Nginx容器中/var/www/html权限正确,以避免访问问题。
配置nginx容器和php容器协同工作成功,使用ip加端口的方式进行通信
|
7月前
|
Ubuntu 应用服务中间件 Linux
在Ubuntu上配置Nginx实现开机自启功能
至此,Nginx应该已经被正确地设置为开机自启。在Ubuntu中利用 `systemd`对服务进行管理是一种高效的方式,为系统管理员提供了强大的服务管理能力,包括但不限于启动、停止、重启服务,以及配置服务的开机自启动。通过这些简洁的命令,即使是对Linux不太熟悉的用户也能轻松地进行配置。
340 0
|
6月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
663 1
二、Linux文本处理与文件操作核心命令
|
6月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
416 137
|
6月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1005 57
|
5月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
938 2
|
6月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
497 0
Linux内存问题排查命令详解