Linux CentOS7部署ASP.NET Core應用程式,並配置Nginx反向代理伺服器

  • 2019 年 11 月 7 日
  • 筆記

前言:

  本篇文章主要講解的是如何在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 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應用程式:

 

Tags: