Home Blog Page 2

跨網站登入的實際應用

跨網站登入就是跨多個不同的Web Server,因為Web Server有自己的Session線程,如果Session無法做到共用的話,就必須要用其他方式處理,如下圖簡單的示意圖: 第一步:是A Web Server給了Client Browser一個連結,而這個連結是連線到A Web Server的pagaA。 第二步:A Web Server回應一個Form表單,但是立即submit出去,而form表單中的src指向B Web Server。 第三步:B Web Server接收了來自Client Browser就會產生B Web Server Session,這個時候,因為收了Client的post資料,資料內可以是Token或者是帳號與密碼(這個部分最好用JWT加解密)。而拿到的Token也可以用Server to Server的方式去詢問資料的有效性。 以上是一個簡單的跨站資料傳輸保有Session的流程,但是不建議在外部網路使用喔,因為有一個弱點,就是在Client Browse可以停用java script,這樣給client的表單就不會被送出,那麼就可以利用來作手腳了。 Form表單的內容可以參考如下: <form action='B Web...

GitLab在反向代理後的設定

透過反向代理的設定,這篇文章已經有談過了,如果還有不懂的地方可以參考以下文章: 利用反向代理伺器突破公司對埠5000/5001的封鎖Setup of GitLab Docker on Synology DSM關於gitlab的docker設定分享 今天要來談的是,Gitlab本身也要做一些設定,讓網頁轉導會正常一些。 關掉註冊服務 Admin Area --> Settings --> Sign-up restrictions --> 、 網頁轉導 Admin Area --> Settings --> Sign-in restrictions --> 與

Raspberry Pi的Kiosk模式

最近開始嘗試研究樹莓派(Raspberry Pi),買了一個Pi4,竟然不用花到兩張小朋友,就有了強大的計算能力,當然也不是白研究的,第一個任務就是希望用樹莓派取代用電腦來進行Kiosk的工作。 目前這台展示機(Kiosk)的功能很簡單,就是用瀏覽器全螢幕播放即可,先來算算看用樹莓派的效益有多好呢?最大效益應該就是在節省電費上吧。 節省電費的效益:電腦:300W/h*24h/1000*3元/度*365天=7884元/年樹莓派:15W/h*24h/1000*3元/度*365天=394.2元/年 哇塞這個效益也不錯拉,等於一年省下來的電費,可以在買兩個全配的樹莓派吧。 接下來是設定Kiosk的部份,首先要下載樹莓派的Imager,把作業系統映像到SD卡上。啟動Imager畫面如下: 另外一提,買到的樹莓派,可能無法開機,沒有任何畫面出來,這很有可能是板子上的EEPROM已經毀損了,可以先選擇,接著在選製作EEPROM boot recovery,用這個開機讀一下就好了,請參考以下兩張圖片。 如果沒有了EEPROM的問題後,就接著製作開機映像檔案燒進去SD卡中,然後開機進到畫面裡,重點開始拉,就是用終端機編寫以下檔案: sudo nano /etc/xdg/lxsession/LXDE-pi/autostart 在最後一行加入以下(已經排除更新顯示訊息的問題): # run kiock mode /usr/bin/chromium-browser --kiosk --disable-restore-session-state --disable-session-crashed-bubble --noerrordialogs --disable-infobars --no-default-browser-check --no-first-run --check-for-update-interval=1 --simulate-critical-update http://kiosk.com 然後接著要處理螢幕會自動休眠的問題,這個開啟裡的,把的關掉就可以,如下圖: 然後重開機,就可以自動放映囉。

反向代理伺服器

無論是正向代理或是反向代理伺服器,因為都有代理,其代理就是Proxy Server的概念。正向代理是正港的Proxy Server,幫你Cache網路上的資料,增加瀏覽的速度,而反向代理呢,就是把你的連線請求再轉接出去,常應用再外網轉街內網的某台伺服器(跟NAT的效果是一樣的)。 之前為了架設GitLab,Synology是用Docker的方式,雖然開了一個30000Port,但是大多的防火牆都只開放80與443,如何要能透過防火牆,這個時候就要借助反向代理的功能了。 GitLab架設請參考: https://mika.i234.me/wordpress/2020/05/18/%e5%bb%ba%e7%bd%aegitlab%e7%9c%9f%e7%b0%a1%e5%96%ae/ 反向代理設定請參考這篇: https://blog.ladsai.com/synology-%E5%88%A9%E7%94%A8%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E4%BC%BA%E5%99%A8%E7%AA%81%E7%A0%B4%E5%85%AC%E5%8F%B8%E5%B0%8D%E5%9F%A05000-5001%E7%9A%84%E5%B0%81%E9%8E%96.html 設定畫面如下:這樣就可以透過80port連線Gitlab了。

NLog再進階Archive File

今天再繼續談NLog,寫檔案的Log,會有一個問題,就是日子久了難免Log會越來越大,大到把硬碟塞爆,然後伺服器Error。 所以自動化清除Log是有必要的,一般保存3個月已經不錯了。NLog有這樣的功能,只要修改config檔案就能辦到,如下: <target xsi:type="File" name="f" fileName="${basedir}/App_Data/logs/logfile.log" layout="${longdate} ${uppercase:${level}} ${message}" archiveFileName="${basedir}/App_Data/Logs/archives/log.{#}.log" archiveNumbering="DateAndSequence" archiveDateFormat="yyyyMMdd" archiveEvery="Day" maxArchiveFiles="90" /> 這個範例表示的是,即時的Log寫在App_Data/logs/logfile.log裡,然後其他天打包的寫在App_Data/Logs/archives/下,並且用日期來編檔名,保留90天內的資料。 其他有關檔名的教學,請參考以下連結: https://github.com/NLog/NLog/wiki/FileTarget-Archive-Examples#archive-numbering-examples

NLog的Log等級

使用等級區分有個好處,就是可以依據嚴重程度或被觸發到的機率,考慮是紀錄到DB就好還是要發送email。 首先要確定在config設定檔內rule的設定,可以參考以下: <rules> <logger name="*" minlevel="Trace" writeTo="database" /> <logger name="*" minlevel="Trace" writeTo="f"...

NLog寄送電子郵件與紀錄事件檢視器

如標題,這個夠犀利了,主要是設定target。 電子郵件 <!-- 寄送 電子郵件 的設定 --> <target name="email" xsi:type="Mail" smtpServer="192.168.1.1" smtpPort="25" smtpAuthentication="Basic" smtpUserName="帳號" smtpPassword="密碼" enableSsl="false" from="hello@abc.com.tw" to="admin@abc.com.tw" html="true" encoding="UTF-8" addNewLines="true" subject="不好了!!!${machinename} 於 ${shortdate} ${time} 產生 ${level} 等級的錯誤。" header="##########################################################################" body="${newline} 時間:${longdate} ${newline}${newline} 等級:${level:uppercase=true} ${newline}${newline} 紀錄者:${logger} ${newline}${newline} 來源:${callsite:className=true} ${newline}${newline} Exception類:${exception:format=type} ${newline}${newline} 錯誤訊息:${message} ${newline}${newline}" footer="##########################################################################" /> newline對html而言是沒有作用的,會擠成一坨,可以在加入以下(讓config使用<br>換行) &lt;br&gt;...

Nlog的紀錄改寫到資料庫中

承接上篇,NLog的紀錄可以改寫到資料庫中的,另外Nlog.config檔案也可以與Web.config合併喔,首先進行合併,把Nlog.config的內容除了<?xml....utf-8"?>不要複製外,把內容貼到Web.config的</configuration>之前,然後跑跑看測試,當然跑不出來囉,這是因為Web.config不認識nlog的標籤,只要在<configSections>標籤下多加入一個<section即可,如下: <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/> 這樣就可以運作了,不過記得資料庫要開Table,語法如下: SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE . ( IDENTITY(1,1) NOT NULL, ...

介紹兩個好用的log套件

以往開發程式一定要處理log的問題,不然還真的不知道該怎麼去抓蟲。log有幾種常見的方式,寫檔案、寫到資料庫或是寫入事件檢視器中,其實在Visual Studio工具中,只要用NuGet就可以非常簡單的方式開始記錄log,以下文章是介紹最好用的四種Log套件,可以參考看看: https://www.codeproject.com/Articles/1278018/Best-Logging-libraries-for-ASP-NET-MVC 筆者推薦兩套,原因如下: 推薦Elmah:只要網站發生任何錯誤導致有error,就會寫log(不用在程式碼裡面特別去寫要記錄log)。IIS的error頁面要localhost端才看得到,但又不見得可以重現,所以有這個之後會方便許多。推薦NLog :紀錄log還有一種情況,例如登入登出的紀錄,這個就不適合用Elmah拉,小而巧的 NLog 與 Log4Net 就很適合,兩套都不錯且有大量粉絲,對Log都能進行分級(一般紀錄「Debug、Info、Warn」、嚴重紀錄「Error、Fatal」),也都能紀錄到資料庫中, 而推薦NLog 的原因,是因為用的人好像比較多一些。 Elmah安裝教學 用NuGet下載 Elmah.Mvc,下載完成後 https://localhost:44345/elmah 就可以看到重大錯誤的log紀錄了,但是因為是放在記憶體中,網站關掉就沒有了。在用NuGet下載 elmah.sqlserver 。修改Web.config 會發現多了一段 <add name="elmah-sqlserver" .........> 把正確的SqlServer設定上去,或是砍掉這段用既有的,但是要修改<errorLog type="Elmah.SqlErrorLog, Elmah"connectionStringName="正確連線名稱"/>執行專案下 ~App_ReadmeElmah.SqlServer.sql 建立資料表,執行完成後,目錄 ~App_Readme...

不能將WebApi寫在App_Code下

這是個大慘案,雖然在WebForm可以這樣做,但是在以MVC架構為主的情況下,放在這樣的地方會造成controller重複,詳細原因不明,但是把webapi放去該去的Controller資料夾下,一切都正常了。..................... 無言...............