.netcore部署Linux並結合Nginx反向代理 get started


一、.NetCore網站准備與發布

  首先准備好一個ASP.NET Core Web應用程序,我這里就使用新建的示例站點作為demo演示,使用dotnet publish 命令發布網站。

       

   或者使用VS的發布工具進行發布,選中網站右鍵選擇發布,然后選擇文件夾形式發布

 

 二、.net core + centos環境准備

2.1 安裝centos:這里我選擇的版本是CentOS-7,虛擬機選擇VMware Workstation Pro,安裝步驟可以到網上搜索,這里不作演示。

2.2 安裝netcore:到微軟.netcore官網可以找到不同系統安裝.netcore的執行命令,執行下面三行命令,在centos7上安裝.netcore-runtime2.1

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
sudo yum update
sudo yum install aspnetcore-runtime-2.1

安裝完畢之后,輸入命令  dotnet  如果出現提示信息,表示安裝.net core 成功,可以繼續下一步操作。

包括可以查看.netcore版本號

  

2.3 安裝Nginx:

第一步:sudo yum install epel-release
第二步:sudo yum install nginx
第三步:啟動 sudo systemctl start nginx

在瀏覽器上輸入Nginx所在服務器的IP地址,可以看到歡迎頁表示安裝成功,如果無法訪問可以檢查下安裝Nginx步驟或者防火牆之類的。

If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:
如果有運行防火牆,那需要允許http和https的通道訪問,運行下面三個命令:

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

三、上傳網站

我們的示例.netcore網站已經制作並發布好了,下一步需要借助一個FTP工具 FileZilla,將發布好的網站文件上傳到CentOS的 home/netcore 文件夾下。

 

四、啟動網站並配置Nginx作反向代理

cd進入到剛才上傳的網站目錄,然后輸入命令: dotnet  HelloNetCore2.dll 啟動網站,分配的端口是5000,localhost:5000

 

下一步配置Nginx,將80端口映射到示例.netcore網站的5000端口

進入到etc/nginx 目錄,找到nginx.config 配置文件,首先注釋掉 nginx.conf 對80端口的listen,然后 nginx.conf 文件有下面一行配置

include /etc/nginx/conf.d/*.conf;

意思是會將所有conf.d 下面的所有*.conf配置都會引入進來,所以我們可以不必修改nginx.conf,而是在conf.d 下增加一個屬於這個示例網站的自定義配置。

 

在conf.d目錄下,新建一個空的netcore.conf 文件,然后輸入下面配置,保存退出。執行:nginx –s reload 使其馬上生效

 如果一切正常,訪問我們的centos服務IP地址,應該就能被Nginx處理訪問到我們的NetCore站點。

 

 

但是也有可能出現以下我遇到的兩種情況:

第一種:出現502錯誤

 

 原因是由於SELinux保護機制所導致,我們需要將nginx添加至SELinux的白名單。接下來我們通過一些命令解決這個問題。

yum install policycoreutils-python
 
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
 
sudo semodule -i mynginx.pp

 

第二種:訪問centos服務IP地址的時候,被location重定向到5001端口,而5001端口是系統分配給這個站點的Https端口

與此同時,curl  netcore 開啟的5000端口也沒有任何東西返回;

為了研究為什么curl http://localhost:5000 沒有任何輸出,可以使用 tcpdump 來監聽指定IP和指定端口

tcpdump -i lo tcp port 5000 and host 127.0.0.1

輸入命令后,另外開啟一個新的putty客戶端進行 curl http://localhost:5000 請求測試
監聽輸出信息如下,具體解釋可以參考網上資料,我們發現其中的過程優先選擇使用HTTPS,這很可能是NetCore項目的默認配置造成的。

在net core官網文檔查到Startup類默認是建議使用HTTPS的,解決方法有二、一是你在centos上安裝好HTTPS證書,二是注釋掉app.UseHttpsRedirection(); 重新發布。

 

 注釋掉,重新編譯發布上傳,重啟站點即可。

 

現在訪問80端口能成功轉發到netcore站點的5000端口了

 

 

 

 

參考資料:

dotnet pulish 命令:https://docs.microsoft.com/zh-cn/dotnet/core/tools/dotnet-publish?tabs=netcore21

linux安裝netcore :https://www.microsoft.com/net/download/linux-package-manager/centos/runtime-current

how-to-install-nginx-on-centos-7:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7

解決502問題:https://www.cnblogs.com/ants/p/5732337.html

netcore Https:https://docs.microsoft.com/zh-cn/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.1&tabs=visual-studio

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM