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