Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
1 iis添加網站
站點名稱:隨便填寫;
應用程序池:創建站點的時候會自動生成對應的,默認就好;
物理路徑:選擇站點所在目錄;
類型:本地一定是http,網上可能會有https;
IP地址:默認端口默認,如果是別的端口,網址訪問的時候要加上端口號,例如:www.tp6.com:8080;
主機名:如果是(本地)服務器只放置一個網站,為空就好,網上服務器填寫域名:例如www.tp6.com,如果是多個網站,也要填寫域名,域名可以是站點的拼音,下面會講為什么這么做;
說幾點需要注意的地方:
1、多個站點的時候,你可能會使用localhost:加不同的端口來訪問;但是這樣會導致難以區分要訪問哪個站點;我們可以做域名重定向
第一步:正常添加站點,在綁定域名的地方填寫www.tp6.com(這里是隨便填寫的),其他不變;
第二步:C:\Windows\System32\drivers\etc找到hosts,編輯,在結尾處填寫127.0.0.1 www.tp6.com;
這樣我們的站點就建立完成了,通過網址www.tp6.com 就可以訪問我們的網站了。
2、如果是本地運行不需要考慮安全性的問題,網上服務器需要注意幾個方面:
1)禁止目錄瀏覽
點開目錄瀏覽---右側操作下邊點禁用;
2)禁止腳本運行
選擇站點---處理映射程序---右側編輯功能權限---勾選的腳本取消掉---確定,我們會把上傳的圖片都放到一個文件夾下,這個文件夾是不需要運行php之類的腳本的;
3)權限
可以在iis選擇站點下文件夾,編輯權限,也可以在電腦里選擇文件夾右鍵點屬性->安全,選擇對應的用戶編輯權限,除了上傳的文件夾別的文件夾包含文件可以只給讀取的全校,不能寫入。如果有寫日志或者寫入緩存這類的文件夾也要給出來寫入權限,拒絕權限是高于允許權限的,也就是說,同時選擇了允許,拒絕,那么該文件夾的權限也是拒絕的。
3、添加完站點,查看一下默認文檔是不是有index.php;
4、可能會出現需要添加MIME類型的情況,例如:支持less,添加擴展名.less,類型text/css;
之前說了怎么利用Windows自帶的iis搭建網站,今天就講一下怎么讓搭建的網站可以外網訪問,這里先簡單的示范一下,首先做好前面的iis安裝和配置,先做一個簡易的頁面,下載好花生殼軟件
打開iis管理器,點擊瀏覽打開根目錄,然后把網頁文件丟進去,名字為 index 后綴為 .html
使用記事本或者網頁編寫軟件把網頁內容寫好,保存文件
做好以后點擊iis管理器右邊的瀏覽網站
瀏覽器打開成功
安裝花生殼軟件
注冊賬號切登錄,這個就不說了 ,這邊我使用一個新的賬號走個流程
登錄后點擊免費激活,然后下一步下一步
例如,我這邊的設置的地址為 192.168.1.105 端口為 80 則
選擇http,填寫對應的地址,點擊保存
然后需要稍微等待一會
當點擊診斷出現的是以下就是已經完成了
.在asp.net core中使用多個環境
ASP.NET Core 配置是基于運行時環境, 使用環境變量。ASP.NET Core 在應用啟動時讀取環境變量ASPNETCORE_ENVIRONMENT,并將該值存儲在 IHostingEnvironment.EnvironmentName 中。ASPNETCORE_ENVIRONMENT 可設置為任意值,但框架支持三個值:Development、Staging 和 Production。 如果發布項目未設置 ASPNETCORE_ENVIRONMENT,則默認為 Production (本機vs中項目Properties\launchSettings.json中environmentVariables默認設置的是Development,如果禁用environmentVariables,那默認則為Production)。
下面是Startup. Configure中的默認實現,本機默認配置的是Development環境。
//如果是Development環境 if (env.IsDevelopment()) { //當捕獲同步和異步系統。管道中的異常實例,并生成HTML錯誤響應。 app.UseDeveloperExceptionPage(); } else { //如果不是Development環境,向管道中添加一個中間件,用于捕獲異常、記錄異常并進行重置 app.UseExceptionHandler("/Home/Error"); app.UseHsts(); }
1.1 Development 模式
開發環境可以啟用不應該在生產中公開的功能, 例如ASP.NET Core 模板在開發環境中啟用了開發人員異常頁(app.UseDeveloperExceptionPage())。當出現異常時,顯示錯誤頁信息如下圖所示:
本地計算機開發環境可以在項目的 Properties\launchSettings.json 文件中設置。 在 launchSettings.json 中設置的環境值替代在系統環境中設置的值。新建的mvc項目默認配置如下:
{ "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:30081", "sslPort": 44349 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "MyNetCoreStudy_MVC": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5001;http://localhost:5000", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } }
launchSettings.json 中的 applicationUrl 屬性可指定服務器 URL 的列表。 在列表中的 URL 之間使用分號。注意:launchSettings.json只用于本機在vs 中開發使用,在開發中可以選擇三種之中任意一種的環境模式。當項目發布后,發布后(iis做反向代理),發布的文件中并不會有launchSettings.json文件。
如果不用vs來啟動應用程序,使用 dotnet run 命令來 啟動應用程序時,使用具有 "commandName": "Project" 的第一個配置文件。 commandName 的值指定要啟動的 Web 服務器。 commandName 可為以下任一項:IIS Express、IIS、Project(啟動 Kestrel 的項目)。
當使用dotnet run 啟動應用時:1會讀取 launchSettings.json中的environmentVariables;2是會顯示打印出host 環境。
1.2 Production 模式
Production 環境應配置為最大限度地提高安全性、性能和應用可靠性。 不同于開發環境的一些通用設置包括:
(1) 緩存
(2) 客戶端資源被捆綁和縮小,并可能從 CDN (網絡分發)提供。
(3) 已禁用診斷錯誤頁。
(4) 已啟用友好錯誤頁。
(5) 已啟用生產記錄和監視。
二. 環境設置
在項目中為測試設置特定環境通常很有用。 如果未設置環境,默認值為 Production,這會禁用大多數調試功能。設置環境的方法取決于操作系統。例如將asp.net core razor項目發布后,部署到IIS上,訪問OtherPages/page1時出現異常。此時默認是Production 環境變量,會顯示了error頁面信息, 表示已啟用友好錯誤頁。如下圖所示 :
2.1 修改環境變量
上面講到,設置環境的方法取決于操作系統:有Azure 應用服務、Windows、macOS、Linux等。每種操作系統上設置環境變量的方法不同,這里不在介紹,具體參考文檔。這里就先只介紹在Windows操作系統上以iis做反向代理的配置環境變量。
在Windows操作系統上配置環境變量方法有很多。當發布后,文件中有一個web.config。這里就介紹下在web.config中設置 ASPNETCORE_ENVIRONMENT 環境變量。使用 web.config 設置 ASPNETCORE_ENVIRONMENT 環境變量后,它的值會替代系統級設置。
<aspNetCore processPath="dotnet" arguments=".\MyNetCoreStudy.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess"> <environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables> </aspNetCore>
此時iis上該項目就是Development開發環境了,再次訪問OtherPages/page1時出現異常,此時會捕獲同步和異步系統。管道中的異常實例,并生成HTML錯誤響應。詳細異常信息如下圖所示:
三. 發布到IIS上步驟
下面簡單講下發布到IIS上的步驟實現:
(1) 安裝好IIS,網上很多參考資料。
(2)下載dotnet-hosting-2.2.1-win.exe 用于在iis上處理對web服務器的請求。下載地址介紹:
https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.2#install-the-net-core-hosting-bundle
在里面找到“當前 .NET Core 托管捆綁包安裝程序(直接下載)”這里進去可以下載到當前版本(aspnetcore-2.2),安裝后,在iis模塊中能看到AspNetCoreModuleV2。對應發布項目中web.config的<handlers>處理。
<handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers>
(3) 在vs中右擊項目發布,選擇"iis Ftp" 點擊發布。 選擇“文件系統”, 目標位置可以選擇當前電腦位置如: D:\DonetCoreStudy\IIS
(4) 在iis這邊,添加網站
(5) 在應用程序池中對項目(MyNetCoreStudy) 選擇無托管代碼。
這樣發布到iis上就成功了。
(6) 發布后打開頁面,如果出現數據庫連接不上,在發布時要選擇,如下圖所示:
還有就是連接配置改成sa的用戶名和密碼登錄,sqlserver服務的登錄為本地服務
(7) iis調試,發布后打開網頁,在vs 2019中附加進程后,無法進入斷點調試,解決是發布為debug模式,如下圖所示:
四. 基于環境的 Startup 類
最后在講下Startup 類約定。當 ASP.NET Core 應用啟動時,會啟動Startup類。 應用程序可以為不同的環境,單獨定義 Startup 類。可以定義例如: StartupDevelopment類、StartupProduction類,Startup類。當程序運行時會選擇相應的 Startup 類。 程序會優先考慮名稱后綴與當前環境相匹配的類。如果是Developmen環境則程序進入StartupDevelopment類,如果是Production環境則程序進入StartupProduction類。如果找不到匹配的 Startup{EnvironmentName},就會使用 Startup 類。
基于環境的 Startup 類實現代碼如下:
public class StartupDevelopment { public void ConfigureServices(IServiceCollection services) { // ... } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // ... } } // Startup class to use in the Production environment public class StartupProduction { public void ConfigureServices(IServiceCollection services) { //... } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { // ... } } // Fallback Startup class // Selected if the environment doesn't match a Startup{EnvironmentName} class public class Startup { public void ConfigureServices(IServiceCollection services) { //... } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { //... } } /// <summary> /// 根據環境變量,動態加載Startup的程序集類 /// </summary> /// <param name="args"></param> /// <returns></returns> public static IWebHostBuilder CreateWebHostBuilder(string[] args) { var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName; return WebHost.CreateDefaultBuilder(args) .UseStartup(assemblyName); }
參考文獻
官方資料:asp.net core 環境
歡迎添加個人微信號:Like若所思。
歡迎關注我的公眾號,不僅為你推薦最新的博文,還有更多驚喜和資源在等著你!一起學習共同進步!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。