(概念摘自網絡)
一.什麼是SSI
SSI:Server Side Include,是一種基於服務端的網頁製作技術,大多數(尤其是基於Unix平臺)的web服務器如Netscape Enterprise Server等均支持SSI命令。
它的工作原因是:在頁面內容發送到客戶端之前,使用SSI指令將文本、圖片或代碼信息包含到網頁中。對於在多個文件中重複出現內容,使用SSI是一種簡便的方法,將內容存入一個包含文件中即可,不必將其輸入所有文件。通過一個非常簡單的語句即可調用包含文件,此語句指示 Web 服務器將內容插入適當網頁。而且,使用包含文件時,對內容的所有更改只需在一個地方就能完成。
二.如何在nginx上配置SSI
需要的選項主要是以下三個:
ssi: 默認值off,啓用ssi時將其設爲on
ssi_silent_errors: 默認值off,開啓後在處理SSI文件出錯時不輸出錯誤提示"[an error occurred while processing the directive]"。
ssi_types: 默認是text/html,所以如果需支持html,則不需要設置這句,如果需要支持shtml則需要設置:ssi_types text/shtml
三個參數可以放在http, server或location作用域下。
三. 實例
server {
listen 10.3.9.27:80;
server_name www.ball.com;
location / {
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
index index.shtml;
root /usr/local/web/wwwroot;
expires 30d;
access_log /data/logs/www.ball.com-access_log main;
}
}
四:結合實際問題
生產環境遇到404 requested resources is not available。如圖:
查找對應實際的服務器日誌,搜索不到對應時間的404錯誤,查看nginx配置,定位不到問題原因。
用微信開發者工具調試過開發環境和測試環境,都無法重現,經大神查看後定位到問題原因:
由於頁面中使用ssi命令引入了一個文件,而該文件並不存在,所以報404錯誤。至於本地和開發環境能啓動成功,是因爲開發環境和測試環境並沒有使用nginx。
後來,我在本地啓動nginx配置中添加
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
重啓nginx,果然404,刪除上述註釋掉的代碼,就OK了。