.NetCore(四) 在Nginx部署


 

​本篇主要體驗一下Nginx的使用,之前只接觸過IIS。

一、Nginx
a) ASP.NET Core內置了Kestrel服務器,但功能簡單,主要用於SelfHost,正式運行還是要依賴IIS、Apache、Nginx等功能全面的服務器,為ASP.NET Core程序提供類似緩存、壓縮請求、SSL終端等高深的特性或功能。這兩種服務器的關系是:Nginx、IIS等作為Kestrel的反向代理服務器。
反向代理、正向代理都不懂,大概的意思是:這兩種代理都處在真正要交互的客戶端與服務器之間,但正向代理要為客戶端代理,科學上網工具應該就是這種(正向代理);反向代理則是為服務端作代理,置於真正的服務器之前,提供安全、緩存、負載均衡等功能。正向代理的配置在客戶端,需要用戶主動配置代理服務器的IP、域名等;而反向代理服務器的配置是服務端的事,用戶可以不必知道反向代理服務器的存在。

b) Nginx的配置和部署
首先需要再應用程序的Startup.Configure中添加與URI重點向和安全策略相關的代碼,這些都是包Microsoft.AspNetCore.HttpOverrides下的方法:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
  ForwardedHeaders = ForwardedHeaders.XForwardedFor
  | ForwardedHeaders.XForwardedProto
});

 

然后測試代碼可以發布了,如果在linux下創建,可以使用dotnet publish命令,完成后會告知發布路徑。

接下來安裝nginx(sudo apt-get install nginx),nginx會被自動作為守護進程(daemon),但第一次安裝后需要手動啟動服務(sudo service nginx start)。

打開/etc/nginx/sites-available/default文件並將內容替換為:

server {
    listen 80;
    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;
    }
}

這樣就配置好了從80端口到5000端口的代理,asp.net core程序的默認端口為5000。運行sudo nginx -s reload讓nginx重新加載配置。

隨后創建service definition file(sudo gedit /etc/systemd/system/kestrel-hellomvc.service),直接用gedit了,方便復制粘貼,vi還是不適合我這用慣圖形界面的程序員。
從文檔復制配置內容:

[Unit]
Description=<應用程序名稱>

[Service]
WorkingDirectory=<發布路徑>
ExecStart=/usr/bin/dotnet <發布路徑.***.dll>
Restart=always
RestartSec=10  # Restart service after 10 seconds if dotnet service crashes
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target



保存后,先執行dotnet <發布路徑.***.dll>在kesrtel服務器中啟動程序,然后順序執行如下命令,以啟動剛剛創建的service definition file:

systemctl enable kestrel-hellomvc.service
systemctl start kestrel-hellomvc.service


執行systemctl status kestrel-hellomvc.service可以查看是否成功。

沒問題遍部署完成了,通過127.0.0.1:80可以正常訪問網站,從報文消息頭中也可以看到響應是來自Nginx。


免責聲明!

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



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