nginx在個人網站上的優化(一)

# nginx在個人網站上的優化(一)

## 一、防盜鏈

個人小網站,當然不希望別人偷偷鏈接使用我網站上的圖片、JS腳本等。

防盜鏈很簡單,增加一個如下的配置文件valid_referers.conf

```nginx
    # 利用Referer配置防盜鏈
    valid_referers xxx.net.cn *.xxx.net.cn;
    if ($invalid_referer) {
        return 403;
    }

```

網上通過在valid_referers後面添加有non、blocked,這兩者是允許無referer時即可獲取了,那還防個毛線。

另外,如果僅配置了*.xxx.net.cn之類,如果瀏覽器以xxx.net.cn打開時,就自己網站也取不到圖片、JS文件了。

同時,在common.conf中增加location,引用valid_referers.conf。

```nginx
    location ~.*\.(js|css|png|jpg)$ {
        # 防止盜鏈
        include /xxxx/etc/nginx/sites-conf/valid_referers.conf;
    }
```

## 二、緩存

個人網站,帶寬資源有限,訪問網站時,一些靜態很少變化的資源,可以讓瀏覽器緩存下來。

同時,在common.conf的location增加如下配置。

```nginx
    location ~.*\.(js|css|png|jpg)$ {
        # 默認緩存過期365天
        expires 365d;
        add_header Cache-Control "public, max-age=31536000";
        
        # 防止盜鏈
        include /xxxx/etc/nginx/sites-conf/valid_referers.conf;
    }
```

## 三、gzip壓縮

在個人網站上增加較多的JS組件後,就會發現JS的代碼實在太大了,動不動一個兩個就幾MB,而nginx針對此種情況,專門有個gzip壓縮功能,可以通過配置開啓。

增加gzip.conf文件,內容如下:

```nginx
    # 對js、css、html格式的文件啓用gzip壓縮功能,圖片格式由於壓縮比例太小,且壓縮耗費cpu不建議壓縮
    gzip on;                                                # 啓用gzip壓縮,默認是off,不啓用
    gzip_proxied expired no-cache no-store private auth;
    # gzip_http_version 1.0;                                 # 用於識別http協議的版本,早期的瀏覽器不支持gzip壓縮,用戶會看到亂碼,所以爲了支持前期版本加了此選項。默認在http/1.0的協議下不開啓gzip壓縮。
    gzip_types text/plain application/x-javascript application/javascript application/css  text/css application/xml text/javascript;   # 爲除“text/html”之外的MIME類型啓用壓縮,“text/html”總是會被壓縮。
    gzip_min_length 20480;                                  # 所壓縮文件的最小值,小於這個的不會壓縮
    gzip_buffers 32 4k;                                     # 設置壓縮響應的緩衝塊的大小和個數,默認是內存一個頁的大小
    gzip_comp_level 3;                                      # 壓縮水平,默認1。取值範圍1-9,取值越大壓縮比率越大,但越耗cpu時間,1爲最小化壓縮(處理速度快),9爲最大化壓縮(處理速度慢)。
    gzip_vary on;                                           # 使用Gzip功能時是否發送帶有“Vary: Accept-Encoding”頭域的響應頭部
    gzip_disable "MSIE [1-6]\.";                            # (IE5.5和IE6 SP1使用msie6參數來禁止gzip壓縮 )指定哪些不需要gzip壓縮的瀏覽器(將和User-Agents進行匹配),依賴於PCRE庫
    gzip_static on;                                         # 在開始壓縮創建硬盤上的文件之前,本模塊將查找同目錄下同名的.gz壓縮文件,以避免同一文件再次壓縮。

```

這兒的配置,我們僅針對javascript/css/xml/plain幾種進行了壓縮,服務器性能挫,因此最小壓縮文件爲20K,壓縮級別定到3,同時開啓了gzip_static(這個模塊啓用後,想生效,則需要在待壓縮的js/css等文件所在路徑,預先用gzip命令壓縮好一個xxx.js.gz這樣的文件)。

同時,在common.conf中增加location,引用gzip.conf。

```nginx
    location ~.*\.(js|css|png|jpg)$ {
        # 默認緩存過期365天
        expires 365d;
        add_header Cache-Control "public, max-age=31536000";
        
        # 防止盜鏈
        include /xxx/etc/nginx/sites-conf/valid_referers.conf;
    
        # 對於過大的JS/CSS文件,啓用gzip壓縮
        location ~.*\.(js|css)$ {
            # 對於過大的JS/CSS文件,啓用gzip壓縮
            include /xxx/etc/nginx/sites-conf/gzip.conf;
        }
    }
```

這兒通過location限定壓縮功能僅對js/css文件生效。

 

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