首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

SSI 伺服器端包含技術全解析(一):啟用配置、文件後綴與 Apache 整合

     編輯:PHP 綜合知識

SSI(Server Side Includes)是一種輕量級伺服器端模板技術,通過 HTML 註釋指令實現頁面片段復用、動態資訊顯示、腳本執行等功能。無需編程語言支援,極適合靜態站點快速構建、維護成本控制。本文詳述 Apache 下 SSI 啟用全流程、配置差異與最佳實踐。

SSI 核心能力

  • <!--#include virtual="/header.html" -->:跨目錄引入公共片段(導航、頁腳)
  • <!--#echo var="DATE_LOCAL" -->:動態顯示伺服器時間
  • <!--#exec cmd="ls -la" -->:執行 Shell 命令(需謹慎開啟)
  • <!--#fsize file="image.jpg" -->:顯示文件大小
  • <!--#config timefmt="%Y-%m-%d" -->:自定義輸出格式

Apache 啟用 SSI 兩大路徑

路徑一:修改主配置文件(需 root 權限,效能最優)

  1. 編輯 httpd.conf(或 apache2.conf),確保載入模組:
    LoadModule include_module modules/mod_include.so
  2. 在目標目錄 <Directory> 區塊啟用 Includes 選項:
    <Directory "/var/www/html">
        Options Indexes FollowSymLinks Includes
        AllowOverride None
        Require all granted
    </Directory>
    • 僅允許包含、禁用腳本執行:Options IncludesNOEXEC
    • 允許 CGI 腳本:Options Includes ExecCGI + AddHandler cgi-script .cgi .pl .sh
  3. 映射解析後綴(建議 .shtml 區分動靜):
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
  4. 重載 Apache:systemctl reload httpd 或 apachectl graceful

路徑二:.htaccess 分散式配置(虛擬主機、無 root 環境)

在目標目錄創建 .htaccess:

Options +Includes
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

# 可選:強制 .html 也解析 SSI(效能較差,不建議全站開啟)
# AddType text/html .html
# AddOutputFilter INCLUDES .html

⚠️ 需主配置允許 AllowOverride Options FileInfo。

文件後綴選擇策略

策略優點缺點適用場景
.shtml 專用靜態 .html 直通輸出,零解析開銷;語義清晰需重命名現有文件,鏈接需更新新專案、靜態頁面佔多數、極致效能要求
.html 全解析無需改動現有鏈接,平滑遷移所有 HTML 經解析器,CPU 開銷增 10-30%舊站改造、SSI 滲透率高、可接受效能折損
混合模式核心頁面 .shtml,邊緣頁 .html + 選擇性解析配置複雜,易誤判大型存量站點分階段遷移

安全加固清單

  1. 禁用 Exec:生產環境**務必**使用 IncludesNOEXEC,防止 <!--#exec cmd="rm -rf /" --> 類攻擊。
  2. 限制包含路徑:virtual 參數禁止 ../ 穿越,file 參數僅限當前目錄下文件。
  3. 輸入驗證:若包含參數來自用戶輸入(如 <!--#include virtual="/user/$_GET[page]" -->),**嚴格白名單驗證**,防止任意文件讀取(LFI)。
  4. 錯誤信息最小化:<!--#config errmsg="[SSI Error]" --> 避免洩露路徑結構。

效能優化建議

  • 啟用 mod_expires、mod_headers 為靜態片段設置長期緩存。
  • 使用 XBitHack on:僅對執行位設置的文件解析 SSI(chmod +x page.shtml),進一步減少解析開銷。
  • 片段文件體積控制在 10KB 以內,避免巨大包含導致 TTFB 飆升。

除錯技巧

# 測試 SSI 是否生效
echo '<!--#echo var="DATE_LOCAL" -->' > test.shtml
curl https://localhost/test.shtml
# 輸出包含當前時間即成功

查看錯誤日誌:tail -f /var/log/httpd/error_log | grep -i ssi

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved