一、.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