ubuntu中已通过apt安装的nginx添加新模块(http_gzip_static_module)
-
备份 防止出错
在目录 /usr/sbin中找到nginx备份
sudo cp /usr/sbin/ngin /usr/sbin/nginx.bak
-
使用已经重新编译过的nginx替换安装的nginx程序
具体编译过程看
链接sudo mv ~/nginx /usr/sbin/
-
重启nginx
sudo service nginx restart
-
测试静态压缩模块和动态压缩模块是否成功
在nginx.conf配置文件中加入相关的配置内容,在vue项目打包的时候使用插件compression-webpack-plugin 将项目中的静态资源同时打包一份同名的.gz文件,部署完成后通过访问不通类型的静态资源查看是否符合预期:
- 在有同名的.gz文件的时候nginx会优先启用静态压缩模块,不选择动态压缩。测试:关闭动态压缩的配置查看response heard 中的Content-Encoding是否是gzip
- 在访问没有同名的静态文件的时候,nginx会启动动态压缩模块,将静态文件压缩位zip格式进行传输。测试:访问没有同名的.gz文件的静态文件,查看response heard 中的Content-Encoding是否是gzip
特别注意:想要进行压缩传输的文件格式一定要加到 gzip_types 中否则动态压缩不会对此类文件进行压缩。
#gzip模块设置
#打开静态压缩 - 如果有相同文件名的.gz文件则会发送该文件,不进行压缩,从而节省cpu资源,无则进行动态压缩,需要前端打包压缩相关文件
#需要安装 http_gzip_static_module 模块,
#查看是否已安装此模块 nginx -V 无则安装 ./configure --with-http_gzip_static_module ,ubuntu需要重新源码编译替换apt安装的nginx程序,
#apt安装的测试发现并没有安装 http_gzip_static_module 模块 虽然nginx -V 能看到有
gzip_static on;
gzip_proxied expired no-cache no-store private auth;
#开启动态gzip压缩输出 优先级小于静态,即同时开启后如果存在同名的 .gz 文件则会直接读取,不会进行压缩
gzip on;
#允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
gzip_min_length 1k;
#设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值。
gzip_buffers 32 4k;
#压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0)
gzip_http_version 1.1;
#压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快
gzip_comp_level 2;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
gzip_types text/plain application/javascript application/x-javascript text/css application/xml
text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject
font/ttf font/opentype font/x-woff image/svg+xml;
#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据
gzip_vary on;
#IE6对Gzip不怎么友好,不给它Gzip了
gzip_disable "MSIE [1-6]\.";
nginx.conf配置文件
user www-data;
#auto
#nginx进程数,建议设置为等于CPU总核心数.
worker_processes 4;
#分配nginx进程到四核cpu,一至四个核分别表示为 0001 0010 0100 1000
worker_cpu_affinity 0001 0010 0100 1000;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
#一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)
#与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致.
#worker_rlimit_nofile 1024;
events {
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
#epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型.
use epoll;
#768
worker_connections 7680;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 180;
client_max_body_size 20m;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
#
##
#gzip模块设置
#打开静态压缩 - 如果有相同文件名的.gz文件则会发送该文件,不进行压缩,从而节省cpu资源,无则进行动态压缩,需要前端打包压缩相关文件
#需要安装 http_gzip_static_module 模块,
#查看是否已安装此模块 nginx -V 无则安装 ./configure --with-http_gzip_static_module ,ubuntu需要重新源码编译替换apt安装的,
#apt安装的测试发现并没有安装 http_gzip_static_module 模块 虽然nginx -V 能看到有
gzip_static on;
gzip_proxied expired no-cache no-store private auth;
#开启动态gzip压缩输出 优先级小于静态,即同时开启后如果存在同名的 .gz 文件则会直接读取,不会进行压缩
gzip on;
#允许压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大
gzip_min_length 1k;
#设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值。
gzip_buffers 32 4k;
#压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请使用1.0)
gzip_http_version 1.1;
#压缩等级.1压缩比最小,处理速度快.9压缩比最大,比较消耗cpu资源,处理速度最慢,但是因为压缩比最大,所以包最小,传输速度快
gzip_comp_level 2;
#压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
gzip_types text/plain application/javascript application/x-javascript text/css application/xml
text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject
font/ttf font/opentype font/x-woff image/svg+xml;
#选项可以让前端的缓存服务器缓存经过gzip压缩的页面.例如:用squid缓存经过nginx压缩的数据
gzip_vary on;
#IE6对Gzip不怎么友好,不给它Gzip了
gzip_disable "MSIE [1-6]\.";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # See sample authentication script at:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}