nginx gzip 静态文件压缩
nginx gzip 静态文件压缩能很大程度上提高网站的访问速度,但是文件的压缩会占用很大的内存,如果将网站的静态的文件提前用gzip压缩后再配置nginx的 rewrite规则来转向到压缩后的文件将会对网站的性能有很大的提高。
思路,把静态文件用gzip压缩后放在网站的目录下,然后用rewrite把请求转发到压缩后的文件,并增加add_header Content-Encoding gzip;这都很容易理解,但是Content-Type的设置就不是那么好搞的了。common.js压缩后是common.js.gz,转发到.gz 文件就好了。
第一次接触nginx对它的配置不是很熟悉,最初在location段增加add_header Content-Type原本认为可以了,但是查看页面传输信息里会有两个Content-Type,一个为新增加的那个,一个为http段的 default_type。
nginx返回两个Content-Type于是我把add_header Content-Type 去掉,在mime.types中增加一个mime类型,增加一个jsgz mime类型并把压缩后的文件更名为common.js.jsgz。转发到.jsgz文件就好了。这样设置可以了但是我总感觉不爽,多增加了几个mime 类型。
最终解决方法在location段增加default_type设置,配置如下:
location ~ .*\.(js)?$
{
expires 30d;
default_type application/x-javascript;
if ($http_accept_encoding ~ “gzip”){
set $rule_0 1$rule_0;
}
if (-f $request_filename.gz){
set $rule_0 2$rule_0;
}
if ($rule_0 = “21″) {
add_header Vary Accept-Encoding;
add_header Content-Encoding gzip;
gzip off;
rewrite (.*) $1.gz break;
}
}
标签: nginx