ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块)

Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块) Nginx HTTP模块详解3、数据处理功能模块3.1、首页处理3.1.1、首页指令——index3.1.2、随机首页指令——random_index3.1.3、自动首页——autoindex3.2、图片处理3.3、响应处理3.4、数据修改3.5、gzip压缩3、数据处理功能模块3.1、首页处理HTTP请求经过一系列的请求流程处理后最终将读取数据并把数据内容返回给用户。当用户请求没有明确指定请求的文件名称时Nginx会根据设定返回默认数据实现这一功能包含ngx_http_index_module、ngx_http_random_index_module、ngx_http_autoindex_module这3个模块。常用的首页处理配置指令如表所示。3.1.1、首页指令——index配置样例如下location /{index index.$geo.html index.html;}指令值为多个文件时会按照从左到右的顺序依次查找找到对应文件后将结束查找。3.1.2、随机首页指令——random_index配置样例如下root /opt/nginx-web/html;location /{random_index on;}该指令的执行优先级高于index指令。文件目录中的隐藏文件将被忽略。3.1.3、自动首页——autoindex自动首页指令自动首页格式指令自动首页文件大小指令自动首页时间指令配置样例如下location /{autoindex on;autoindex_format html;autoindex_exact_size off;autoindex_localtime on;}3.2、图片处理模块名称ngx_http_image_filter_module该模块可以对JPEG、GIF、PNG或WebP格式的图片文件进行动态旋转、比例缩放及裁剪。该模块的内置配置指令如表所示。图片处理指令image_filter指令值参数图片处理缓冲区指令JEPG图片质量指令WebP图片质量指令图片背景指令图片锐化指令图片交错加载指令配置样例如下upstream img1{server192.168.2.145:8080;}server{listen8083;server_name image.nginxtest.org;index index.html index.htm index.php;image_filter_buffer 20M;# 设置图片处理缓冲区大小为20MBimage_filter_sharpen150;# 对图片进行150%的锐化处理image_filter_jpeg_quality70;# JPEG图片的压缩比为70%image_filter_transparency off;# 对GIF及PNG图片去掉透明背景image_filter_interlace on;# 将输出图片转换为交错格式location /{root /opt/nginx-web;}# 比例缩放图片尺寸file_100x100.jpglocation * .*_(\d)x(\d)\.(JPG|jpg|gif|png|PNG)${set$img_width$1;# 缩放图片的宽set$img_height$2;# 缩放图片的高rewrite ^(.*)_\dx\d.(JPG|jpg|gif|png|PNG)$ /images$1.$2break;image_filter resize$img_width$img_height;proxy_pass http://img1;}# 比例缩放图片尺寸并压缩file_100x100_80.jpglocation * .*_(\d)x(\d)_(\d)\.(JPG|jpg|gif|png|PNG)${set$img_width$1;# 缩放图片的宽set$img_height$2;# 缩放图片的高set$img_quality$3;# 图片的质量rewrite ^(.*)_\dx\d_\d.(JPG|jpg|gif|png|PNG)$ /images$1.$2break;image_filter resize$img_width$img_height;image_filter_jpeg_quality$img_quality;proxy_pass http://img1;}# 比例缩放图片尺寸并旋转file_100x100__90.jpglocation * .*_(\d)x(\d)__(\d)\.(JPG|jpg|gif|png|PNG)${set$img_width$1;# 缩放图片的宽set$img_height$2;# 缩放图片的高set$img_rotate$3;# 旋转参数rewrite ^(.*)_\dx\d__\d.(JPG|jpg|gif|png|PNG)$ /images$1.$2break;image_filter resize$img_width$img_height;image_filter rotate$img_rotate;proxy_pass http://img1;}# 裁剪图片尺寸file_100x100_crop.jpglocation * .*_(\d)x(\d)_crop\.(JPG|jpg|gif|png|PNG)${set$img_width$1;# 裁剪图片的宽set$img_height$2;# 裁剪图片的高rewrite ^(.*)_\dx\d_crop.(JPG|jpg|gif|png|PNG)$ /images$1.$2break;image_filter crop$img_width$img_height;proxy_pass http://img1;}}模块ngx_http_empty_gif_module该模块将在内存中创建一个单像素的GIF透明图片。该模块的内置配置指令如表所示。配置样例如下location/_.gif{empty_gif;}3.3、响应处理模块ngx_http_headers_module该模块允许用户在HTTP响应头中添加Expires、Cache-Control及自定义属性字段。该模块的内置配置指令如表所示。添加字段指令尾添加字段指令尾添加字段指令指令格式如下add_trailer name value[always];可以通过HTTP响应体尾部的数据对响应数据做完整性校验、数字签名或请求处理后的状态传递。缓存时间指令当指令值为时间时既可以是正值也可以是负值。Expires的值为当前时间与指令值的时间之和。当指令值的时间为正或0时Cache-Control的值为指令值的时间。当指令值的时间为负时Cache-Control的值为no-cache。当指令值为时间时可用前缀指定一个绝对时间表示在当天的指定时间失效。当指令值为epoch时Expires的值为Thu,01 Jan 197000:00:01 GMT, Cache-Control的值为no-cache。当指令值为max时Expires的值为Thu,31 Dec 203723:55:55 GMT, Cache-Control的值为10年。当指令值为off时不对响应头中的属性字段Expires和Cache-Control进行任何操作。配置样例如下map$content_type$expires{# 根据$content_type的值对变量$expires进行赋值default off;# 默认不修改Expires和Cache-Control的值application/pdf 42d;# application/pdf类型为42天image/ max;# 图片类型为max}server{expires 24h;# 设置Expires的值为当前时间之后的24小时# Cache-Control的值为24小时expires modified 24h;# 编辑Expires的值增加24小时Cache-Control的值增# 加24小时expires 15h;# 设置Expires的值为当前日的15点Cache-Control的值# 为当前时间到当前日15点的时间差expires$expires;# 根据变量$expires的内容设置缓存时间add_header Cache-Control no-cache;add_trailer X-Always$hostalways;}模块ngx_http_charset_module该模块在响应头的属性字段“Content-Type”添加指定的字符集同时还可以进行字符集转换。字符集转换有如下限制只能从服务端到客户端进行单向转换。只能单字节字符集进行转换或在单字节字符集与UTF-8之间进行转换。该模块的内置配置参数如表所示。字符集指令源字符集指令字符集映射指令字符集MIME类型指令字符集代理转换指令3.4、数据修改模块ngx_http_addition_module该模块可以在响应数据的前面或后面添加文本。该模块需要配置编译时添加编译参数–with-http_addition_module。该模块的内置配置指令如所示。响应数据前添加指令响应数据后添加指令响应数据类型指令配置样例如下server{listen8081;server_name localhost;charset utf-8;root /opt/nginx-web/html;location /{add_before_body /_head.html;# 在响应数据前添加/_head.html的响应数据add_after_body /_footer.html;# 在响应数据后添加/_footer.html的响应数据index index.html;}}模块ngx_http_sub_module该模块可以通过内建指令将响应数据中的字符串替换成指定的字符串。该模块需要配置编译时需要添加编译参数–with-http_sub_module。该模型的内置配置指令如表所示。字符串替换指令保留最后编辑字段指令仅替换一次指令替换数据类型指令配置样例如下location /{sub_filter_types text/html;sub_filter_once off;sub_filtera hrefhttp://127.0.0.1:8080/a hrefhttps://$host/;sub_filterimg srchttp://127.0.0.1:8080/img srchttps://$host/;}3.5、gzip压缩模块ngx_http_gzip_module为提高用户获取响应数据的速度Nginx服务器可以将响应数据进行gzip压缩在减小响应数据的大小后再发送给用户端浏览器相对于使用户浏览Web页面上述方式显示速度更快。要想启用响应数据gzip压缩功能需要用户浏览器也支持gzip解压功能目前大多数浏览器都支持gzip压缩数据的显示。Nginx服务器接收客户端浏览器发送的请求后通过请求头中的属性字段Accept-Encoding判断浏览器是否支持gzip压缩对支持gzip压缩的浏览器将发送gzip压缩的响应数据。该模块的内置配置参数如表所示。gzip压缩指令gzip压缩缓冲区指令gzip压缩关闭指令gzip压缩HTTP版本指令gzip压缩最小长度指令gzip压缩代理指令指令值选项说明如下。off关闭该指令功能。expired若HTTP响应头中包含属性字段Expires则启用压缩。no-cache若HTTP响应头中包含属性字段Cache-Control:no-cache则启用压缩。no-store若HTTP响应头中包含属性字段Cache-Control:no-store则启用压缩。private若HTTP响应头中包含属性字段Cache-Control:private则启用压缩。no_last_modified若HTTP响应头中不包含属性字段Last-Modified则启用压缩。no_etag若HTTP响应头中不包含属性字段ETag则启用压缩。auth若HTTP响应头中包含属性字段Authorization则启用压缩。any对所有响应数据启用压缩。gzip响应数据类型指令gzip_vary指令模块ngx_http_gunzip_module当客户端浏览器不支持gzip压缩时该模块将压缩的数据解压后发送给客户端。对支持gzip压缩的浏览器不做处理。该模块的内置配置指令如表所示。gzip解压指令gzip解压缓冲区指令模块ngx_http_gzip_static_module通常gzip压缩指令都是读取未压缩的文本在进行动态压缩后把响应数据发送给客户端该模块可以使Nginx把gzip压缩过的以.gz为后缀的文件或已压缩的响应数据直接发送给客户端。该模块的内置配置指令如表所示。静态压缩指令on不检查客户端是否支持gzip压缩数据始终发送gzip压缩数据。always不检查客户端是否支持gzip压缩数据始终发送gzip压缩数据。该指令的执行优先级高于gzip指令。开启该指令后默认优先查找以.gz为后缀的文件。gzip_types指令对gzip_static的设置无效。配置样例如下gzip_static always;# 始终发送静态的gzip压缩数据gunzip on;# 若客户端浏览器不支持gzip压缩数据则解压后发送gunzip_buffers168k;# 解压缓冲区大小为128KBgzip_proxied expired no-cache no-store private auth;# 当被代理的服务器符合条件时# 对响应数据启用gzip压缩gzipon;# 启用动态gzip压缩功能gzip_min_length 1k;# 响应数据超过1KB时启用gzip压缩gzip_buffers416k;# 动态压缩的缓冲区大小是64KBgzip_comp_level3;# 压缩级别为3gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 对指定的MIME类型数据启用动态压缩gzip_vary on;# 向前端代理或缓存服务器发送添加“Vary: Accept-# Encoding”的响应数据
返回列表