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

 

posted @ 2022-07-05 14:54  日月王  阅读(61)  评论(0编辑  收藏  举报