1、安裝.Net Corehtml
參考官方文檔:https://www.microsoft.com/net/core#linuxcentosnode
一、添加dotnet產品Feedlinux
在安裝.NET Core以前,您須要註冊Microsoft產品Feed。這隻須要作一次。首先,註冊Microsoft簽名密鑰,而後添加Microsoft產品Feednginx
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
二、安裝.NET Core SDKc++
sudo yum update sudo yum install libunwind libicu sudo yum install dotnet-sdk-2.0.0
以後運行命令web
dotnet --info
能夠查看安裝是否成功。至此,.Net Core的安裝就完成了。vim
固然,也可使用解壓安裝。到 https://www.microsoft.com/net/download/linux 下載centos7對應的sdk壓縮包,以後解壓到自定義的安裝路徑。centos
sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
# 能夠設置一下環境變量,也能夠採用下面的方式創建軟連接,由於 /usr/local/bin 默認包含於$PATH中
sudo ln -s /opt/dotnet/dotnet /usr/local/bin
# 以後運行查看安裝結果
dotnet --info
2、編譯運行項目瀏覽器
一、新建一個mvc項目安全
dotnet new mvc -o ntmvc
以下圖所示:
查看ntmvc文件夾 ,能夠發現,一個mvc項目的模板已經建好了,以下:
二、修改 Startup.cs 文件
可使用vscode直接修改遠程計算機或者是虛擬機中的文件,具體參考 http://www.cnblogs.com/learn21cn/p/6189023.html
因爲後面要用到nginx搭建反向代理,在此處修改一下Startup.cs文件中的代碼,添加引用 using Microsoft.AspNetCore.HttpOverrides;
以後再在 Startup.cs 文件的 Configure 方法中添加一段代碼(具體參見下面完整的Startup.cs文件):
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; //添加引用 using Microsoft.AspNetCore.HttpOverrides; namespace ntmvc { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); //添加下面的代碼 app.UseForwardedHeaders(new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); app.UseAuthentication(); } } }
三、生成項目
首先切換到項目目錄ntmvc,以後運行下面的命令
dotnet publish -c Release
以下所示:
運行命令以後,項目目錄中會多出一個bin文件夾
在bin文件夾中會包含Release文件夾,在Release文件夾中的netcoreapp2.0文件夾中,會包含能夠發佈的內容,即publish文件夾。
注:publish文件夾以外的內容,同咱們運行 dotnet run 命令時所生成的文件是相同的,只不過Debug文件夾換成了本身命名的Release文件夾而已。換句話說,運行dotnet publish -c Release 比運行 dotnet run 多了一個publish文件夾,而這個文件夾正是所要發佈的內容
四、運行項目
切換到publish文件夾,運行命令
dotnet nmvc.dll
以下圖所示:
五、項目的開機自動運行
接下來設置項目的開機自動啓動,在 /etc/systemd/system/ 中新建一個服務文件
vim /etc/systemd/system/kestrel-ntmvc.service
內容以下:
[Unit] Description=Example .NET Web MVC Application running on Centos7 [Service] WorkingDirectory=/root/ntmvc ExecStart=/usr/bin/dotnet /root/ntmvc/bin/Release/netcoreapp2.0/publish/ntmvc.dll Restart=always RestartSec=10 # Restart service after 10 seconds if dotnet service crashes SyslogIdentifier=dotnet-example User=root Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target
以後保存,運行如下命令:
systemctl enable kestrel-ntmvc.service systemctl start kestrel-ntmvc.service systemctl status kestrel-ntmvc.service
注意:若是檢查到錯誤,須要修改 kestrel-ntmvc.service 文件,修改正確以後,須要運行如下命令從新啓動:
systemctl daemon-reload
systemctl restart kestrel-ntmvc.service
下面是正常運行後的結果
到此爲止,一個簡單的項目就能夠正常訪問了。接下來,對項目進行改造,引入nginx的使用。
3、編譯安裝nginx
一、安裝依賴項
yum -y install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel
二、下載安裝包
最新的下載地址請到官網獲取。
wget http://nginx.org/download/nginx-1.13.5.tar.gz
三、解壓
mkdir nginxfiles tar -zxvf nginx-1.13.5.tar.gz -C nginxfiles
四、切換目錄
cd nginxfiles/ cd nginx-1.13.5/
以下圖:
五、編譯安裝
執行如下命令
# 配置:這裏須要安裝額外的模塊
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-mail=dynamic
# 編譯
make
# 安裝
make install
如下是安裝的結果
六、建立軟連接
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin
如上所述,這樣能夠不用再設置環境變量。
4、證書相關
爲了加強項目的安全性,有時須要將http訪問轉爲https訪問。經過對nginx中ssl模塊進行設置,能夠實現這一點。
一般,這須要向CA申請安全證書(經常使用免費證書:https://letsencrypt.org/ )。
因爲這裏僅做測試用,所以使用本身生成的證書。
一、證書的生成
在root目錄下創建certs文件夾,切換到該文件夾,依次運行如下命令:
# 創建服務器私鑰(過程須要輸入密碼,請記住這個密碼)生成RSA密鑰 openssl genrsa -des3 -out testcert.key 1024
# 生成一個證書請求 須要依次輸入國家,地區,組織,email,common name等,common name能夠寫你的名字或者域名。若是爲了https申請,必須和域名吻合,不然會引起瀏覽器警報。 openssl req -new -key testcert.key -out testcert.csr
# 生成不須要密碼的key openssl rsa -in testcert.key -out testcert_nopwd.key
# 生成crt文件 openssl x509 -req -days 365 -in testcert.csr -signkey testcert_nopwd.key -out testcert.crt
如如下兩圖:
二、證書的位置
將證書複製到 /etc/ssl/certs/ 目錄
cp testcert.crt /etc/ssl/certs/ cp testcert_nopwd.key /etc/ssl/certs/testcert.key
以下圖:
三、迪菲-赫爾曼密鑰交換
通常來講,以後修改nginx.conf配置文件就能夠了。爲了進一步加強安全性,能夠進行迪菲-赫爾曼密鑰交換,在 /etc/ssl/certs/ 目錄中
openssl dhparam -out dhparam.pem 4096
如下是生成的文件
5、nginx配置文件相關
一、自定義 proxy.conf 文件
在 /usr/local/nginx/conf/ 目錄下新建 proxy.conf 文件,後面會在nginx.conf中引用此文件。
proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffers 32 4k;
二、修改 nginx.conf 文件
修改 /usr/local/nginx/conf/ 目錄下的nginx.conf文件,着重點已經使用了不一樣的顏色進行標註。
worker_processes 1; events { worker_connections 1024; } http { include proxy.conf; include mime.types; default_type application/octet-stream; limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s; server_tokens off; sendfile on; #tcp_nopush on; keepalive_timeout 29; client_body_timeout 10; client_header_timeout 10; send_timeout 10; upstream ntmvc{ server localhost:5000; } server { listen 80; add_header Strict-Transport-Security max-age=15768000; return 301 https://$host$request_uri; } # HTTPS server # server { listen *:443 ssl; server_name localhost; ssl_certificate /etc/ssl/certs/testcert.crt; ssl_certificate_key /etc/ssl/certs/testcert.key; ssl_protocols TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_stapling on; #ensure your cert is capable ssl_stapling_verify on; #ensure your cert is capable add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; #Redirects all traffic location / { proxy_pass http://ntmvc; limit_req zone=one burst=10 nodelay; limit_req_status 503; } } }
6、nginx 開機自動啓動
# 設置nginx自啓動,在/lib/systemd/system/ 目錄下建立一個服務文件
vim /lib/systemd/system/nginx.service
注意,這裏的路徑是 /lib/systemd/system/ ,而非上面ntmvc項目自啓動服務文件所在的 /etc/systemd/system/ 這一點值得注意。
內容以下:
[Unit] Description=nginx - high performance web server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s stop [Install] WantedBy=multi-user.target
文件編輯完成以後,運行如下命令啓動服務:
systemctl enable nginx.service
# 啓動nginx服務
systemctl start nginx.service
# 查看狀態
systemctl status nginx.service
結果以下:
這裏之因此有一個警告,是由於咱們使用的證書是本身生成的,而不是正式的證書。
一般,對配置文件修改後須要重啓服務,執行如下命令:
# 若是修改了文件,這個是必須的 systemctl daemon-reload
# 從新啓動服務 systemctl restart nginx.service
7、防火牆相關
如下的三個端口是必需要開的 ,其餘的視狀況而定。
#端口 firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=5000/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent #開端口後必須從新加載 firewall-cmd --reload # 查看全部打開的端口: firewall-cmd --list-ports
具體的操做如圖所示:
從新加載並顯示端口
8、訪問相關
以上的配置完成以後,若是環境使用的是真實的物理機,或者是橋接的虛擬機,直接訪問ip地址就能夠了。
若是是NAT鏈接的虛擬機,須要進行端口映射。本實驗使用的VirtualBox 搭建的虛擬機,以此爲例,按下圖進行設置便可。
若是是直接在虛擬機中進行瀏覽,瀏覽127.0.0.1 或者localhost 便可。
若是是從主機進行訪問,可在主機的瀏覽器中輸入https://192.168.56.1:1518,便可映射到虛擬機的443端口,這樣就能夠經過https進行訪問虛擬機中的ntmvc項目。
因爲在nginx.conf中配置了 add_header Strict-Transport-Security max-age=15768000; 即只能容許https訪問, 所以輸入http://192.168.56.1:1518 會提示錯誤。
正常的訪問結果以下圖所示(谷歌瀏覽器),之因此會出現這樣的提示,是由於所用的證書是本身生成的。
繼續訪問便可訪問ntmvc中的頁面,以下圖:
官方參考文檔:
https://docs.microsoft.com/zh-cn/aspnet/core/publishing/linuxproduction?tabs=aspnetcore2x