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

前言:

  本篇文章主要講解的是如何在Linux CentOS7操做系統搭建.NET Core運行環境併發布ASP.NET Core應用程序,以及配置Nginx反向代理服務器。由於公司的項目一直都是託管在Window服務器IIS上,對於Linux服務器上託管.NET Core項目十分好奇。由於好奇,所以就有了這篇文章關於如何在Linux CentOS7系統中配置.NET Core運行環境,部署項目和反向代理服務器的配置。linux

1、開發工具介紹

Xshell:

  是一個強大的安全終端模擬軟件,它支持SSH1, SSH2, 以及Microsoft Windows 平臺的TELNET 協議。Xshell 經過互聯網到遠程主機的安全鏈接以及它創新性的設計和特點幫助用戶在複雜的網絡環境中享受他們的工做。nginx

Xftp:

  是一個功能強大的SFTPFTP 文件傳輸軟件。使用了 Xftp 之後,MS Windows 用戶能安全地在 UNIX/Linux 和 Windows PC 之間傳輸文件。Xftp 能同時適應初級用戶和高級用戶的須要。它採用了標準的 Windows 風格的嚮導,它簡單的界面能與其餘 Windows 應用程序緊密地協同工做,此外它還爲高級用戶提供了衆多強勁的功能特性。redis

固然這兩個工具提供了非商業用途的無償使用權限,你只須要填寫對應的信息便可。shell

下載地址:https://www.netsarang.com/en/free-for-home-school/vim

2、.NET Core環境搭建

環境下載地址:https://dotnet.microsoft.com/downloadcentos

查看操做系統版本:

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

3、項目發佈並部署到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端口號進行訪問,訪問成功,頁面以下圖所示:

4、配置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,項目成功運行:

 

相關文章
相關標籤/搜索