# 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文件生效。