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

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 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應用程式:

&n