懷念 leoboard 論壇:用 Docker 建置 CGI 環境
Contents
現在講 Web 應用,多半都在談框架、API 和容器化,但有些舊系統或特殊工具仍然會碰到 CGI。當你想把這類老環境搬進 Docker 時,問題通常不在 Docker 本身,而是在 Apache 模組、ScriptAlias 和執行權限有沒有配好。
CGI 在這裡是什麼角色
CGI 是一種比較早期的 Web 執行模型,讓 Web Server 收到請求後,去呼叫外部程式並把結果回給使用者。即使現在不是主流,在某些遺留系統、簡單工具或歷史專案裡還是看得到。
Docker 裡要注意什麼
把 CGI 放進容器後,最常要確認的有三件事:
- Apache 載入的是哪個 CGI 模組。
cgi-bin路徑有沒有對好。- 腳本檔案有沒有執行權限。
Apache 模組差異
根據 Apache 的 MPM 模式不同,可能會用到不同模組:
|
|
或:
|
|
這件事如果沒弄清楚,後面你會以為是 CGI 腳本有問題,實際上可能只是模組根本沒載進來。
ScriptAlias 也要對
例如:
|
|
這代表 /cgi-bin/ 底下的請求會被映射到實際檔案路徑,並視為可執行腳本處理。
最常見的錯誤
很常看到類似權限問題:
|
|
通常第一件要做的事,就是確認檔案是否真的可執行:
|
|
小結
用 Docker 建 CGI 環境其實不是不能做,只是要把 Apache 模組、路徑映射和執行權限這三件事先釐清。對現代專案來說它未必是首選,但在維護舊系統或搬遷歷史環境時,這類知識還是很實用。