nginx中SSI問題

(概念摘自網絡)

一.什麼是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了。










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章