跳到主要內容

Caddy2 設定 CodeIgniter4


繼上篇安裝及設定 Caddy2 網頁伺服器,完成 http/3 服務後,接下來設定 CodeIgniter 4 的使用環境。

來基隆之後,自己習慣使用 CodeIgniter 4(CI4)來作網站開發。CI4 是蠻流行的 PHP 框架,以自已的經驗真的很好用而且快速,而且因為我的案子基本上都是設定在差不多的族群,所以在基礎的資料庫架構及部份基本功能都一樣,可以直接做成 Model 和 Controller,下一個案子直接複制過去就可以了。

Apache2 設定

以往伺服器是用 Apache2 架的,在網站的設定上只須要設定 Alias 和 Directory 即可,rewrite 的部份由 CI4 自帶的 .htaccess 完成。例如將 CI4 的網站 composer 在 /var/www/ci4 路徑中:

Alias /ci4 "/var/www/ci4/public"

        <Directory "/var/www/ci4/public">

                Options -Indexes

                AllowOverride All

                <Limit GET POST>

                        Require all granted

                </Limit>

        </Directory>

因為自已的程式還沒有開始使用 CRUD 類似 API 的作法,所以都習慣會作 Limit GET POST 去限制客戶端的 method。


Caddy2 設定

Caddy2 的設定忙了好久,總算是搞懂差不多了。

作為伺服器的主網站

將 CI4 的網頁設定成伺服器的主網站只需要在主要的 root 上設定即可。


有些論壇網站上的資料說還要設定 try_files {path} {path}/ /index.php{path},實作後發現不需要,網站也可以正常運作。

作為伺服器的子目錄網站

伺服器只有一台,而要作的案子好幾個,所以要在同一台伺服器下塞進去多個網站,作法就是用子目錄來作區分。

在 Apache2 伺服器上只需要設定 Alias 和 Directory 即可。但是在 Caddy2 上設定 handle 或 handle_path 一直不成功,會出現 404 的訊息。


但是這個 404 頁面和伺服器原生的 404 訊息不同,是由 CI4 產生的。表示其實 CI4 的程式是有執行,但是發生某種檔案找不到的問題。

這個問題找了好久,加上 Caddy2 太新,網路上的論壇資料不多,而且 Caddy2 的 local log 又太簡陋,差一點就放棄了。

後來在重新翻閱 CI4 的官方說明中,發現自已以往不會使用的功能:.env(環境值設定)。CI4 有提供快速設定運作環境 .env 檔案,我之前都是直接修改 /app/Config/ 下的各個設定檔。


先把網頁目錄中的 env 檔複製成 .env,在裡面設定 CI_ENVIRONMENT = development。把運作環境設定成開發模式(development),CI4 會在錯誤畫面中顯示更多的資訊。

例如子網站 /testci4,程式位置 /var/www/testci4,Caddy2 的設定:


使用 handle_path 設定網頁路徑,用 root 指定程式起始位置。使用子目錄需要設定 try_files。此時網站還不能正常使用,會出現404的訊息。

錯誤的原因是因為在 Caddy2 的環境中,系統網址路徑會帶著 /testci4/abc,和原本的 Apache2 只傳遞 /abc 的方式不同,所以 CI4 會去找 Controller/testci4/abc 的 Controller,所以會找不到。找了幾種方式要消除 /testci4 路徑,還沒有成功。

所以要解決這個錯誤,只需要在 app/Config/Routers.php 中手動設定 Router 就可以了。


嚴格設定 Router 是保障網站安全性的指引之一,但是以前為了方便和懶,都是使用 AutoRouting 的功能,現在看來以後不能再那麼隨便了。




留言

這個網誌中的熱門文章

Arudino 教學(三):多顆 LEDs

本次實作將加深 LED 電路,練習多顆 LEDs 與共地線電路,並使用 Arduino Uno 進行控制。另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉多顆 LEDs 與共地線電路接線 使用 Arduino 程式進行多顆 LEDs 控制 電路圖: 線路說明: LEDs 負極(短腳)共同連接在一起,再接至 Arduino GND(接地)腳位 LEDs 正極(長腳)先連接一220Ω 電阻之後,再分別連接至 Arduino 10 號與 11號腳位 程式截圖: 程式說明: 在 setup 區塊中,利用 pinMode 設定 10 腳位為輸出用途,設定 11 腳位為輸出用途 在 loop 區域中,利用 digitalWrite 送出 HIGH 點亮  LED,LOW 關閉 LED 燈,其中 10 號腳位 HIGH 時,11號腳位則為 LOW,反之亦然 delay(1000) 延遲一秒 進階: 改變延遲時間 增加閃動變化 增加 LED 的數量

IPv6 系列(五):KEA DHCP SERVER

學校在純 IPv4 的環境時,採用 ISC-DHCP Server 來發放教學區域的私有 IP(10.10.xxx.xxx),並使用閘道 Fortigate 作 NAT 連接到 Internet。 採用 IPv6 後,原本是要使用 ISC-DHCPv6 來作為 IPv6 發放,結果 ISC-DHCPv6 架不起來。不過在查詢 DHCPv6 的過程中,發現 ISC(Internet System Consortium)已開發出下一代的 DHCP Server:Kea Dhcp Server。 Kea Dhcp Server 官網: https://www.isc.org/kea/ 摘錄  https://www.itread01.com/content/1548712273.html  對 Kea DHCP Server 的介紹: Kea DHCP Server 由 Internet Systems Consortium(ISC) 開發的開源 DHCPv4/DHCPv6 伺服器。Kea DHCP Server 是一個高效能的,可擴充套件的DHCP伺服器引擎。通過hooks library可以很容易的修改和擴充套件。 Kea包含的功能元件 keactrl — kea伺服器啟動,停止,配置重置和狀態查詢元件 kea-dhcp4 — DHCPv4伺服器程式,用於響應客戶端的DHCPv4查詢。 kea-dhcp6 — DHCPv6伺服器程式,用於響應客戶端的DHCPv6查詢。 kea-dhcp-ddns — DHCP動態DNS程式.這個程式在DHCP伺服器和DNS伺服器之間扮演者調解者。它接收來自DHCP伺服器域名更新請求和傳送DNS更新訊息給DNS伺服器。也就是說DDNS捕獲使用者每次變化的IP地址,然後將其與域名相對應,這樣其他上網使用者就可以通過域名來進行交流。而最終客戶所要記憶的全部,就是記住動態域名商給予的域名即可,而不用去管他們是如何實現的。 軟體執行環境 加密庫Botan或者OpenSSL log4cplus 1.0.3+ 如果有需要mysql,需要MySQL headers and libraries。可選(postgresql、cassandra類同) 選用 Kea DHCP Server 的原因,...

幾個網頁排版技巧

  1、首行縮排2字元 中文文章會習慣每段的首行縮排2字元 CSS設定:text-indent: 2em 2、利用 Web font loader 動態載入網路字型 JS: <script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js"></script> <script>      WebFont.load({           google: {   families: ['Noto Sans TC','Droid Sans'] }   }); </script> 參考資料: 網路字型載入工具  |  Google Fonts  |  Google Developers typekit/webfontloader: Web Font Loader gives you added control when using linked fonts via @font-face. (github.com) 网页字体优化之字体异步加载 | Blog @ GIUEM Web字体载入利器(Web Font Loader)使用详解(Web字体加载缓慢解决办法)_web加载字体_lt_1111的博客-CSDN博客 Web字体载入利器-->Web Font Loader - w3ctech 3、常用CDN jQuery CDN Google Hosted Libraries  |  Google Developers 4、改善字型 render body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; font-smoothing: antialiased; }