nginx|nginx那点事儿——nginx模块


nginx模块

  • 前言
  • 一、常见的nginx web模块
    • 1.随机主页 random_index_module
    • 2.替换模块 sub_module
    • 3.文件读取模块 ngx_http_core_module
    • 4.文件压缩 ngx_http_gzip_module
    • 5.状态访问统计 ngx_http_stub_status_module
    • 6.防盗链 ngx_http_referer_module
    • 7.用户访问限制
      • 1.连接频率限制 ngx_http_limit_conn_module
      • 2.请求频率限制 ngx_http_limit_req_module
    • 8.用户访问控制
      • 1.基于主机 ngx_http_access_module
      • 2.基于用户 ngx_http_auth_basic_module
  • 二、nginx 新增模块

前言
nginx模块是nginx相比于apache一个很大的优点,模块可以为nginx提供更多的功能来满足运维日常需求。当有一些需求,我们只需要编译新的模块重启nginx即可完成。
一、常见的nginx web模块 1.随机主页 random_index_module (1)mkdir /usr/share/nginx/html/random_index
touch /usr/share/nginx/html/random_index/{blue.html,green.html,red.html,yellow.html}color - 锐客网color!

(2)vim /etc/nginx/conf.d/liang.conf
server{listen 192.168.93.136:8080; server_name web.liang.com; location /{#root /usr/share/nginx/html; #index liang.html; root /usr/share/nginx/random_index; random_index on; }}

(3)访问 192.168.93.136:8080 并刷新 查看网页变化
2.替换模块 sub_module Syntax: sub_filter A B; # 网页中的A替换成B
Default: —
Context: http, server, location

Syntax: sub_filter_once on | off;
Default: sub_filter_once on;
Context: http, server, location

server{listen 192.168.93.177:8080; server_name web.kong.com; location /{root /usr/share/nginx/html; index kong.html index.html; sub_filter kong ''; # 把kong替换为空#sub_filter_once on; # 只替换匹配到的第一个kongsub_filter_once off; # 全部替换}}

3.文件读取模块 ngx_http_core_module Syntax: sendfile on | off; # 加快网络传输速率
Default: sendfile off;
Context: http, server, location, if in location
未使用sendfile网络传输 过程:
硬盘 >> kernel buffer >> user buffer>> kernel socket buffer >>协议栈
使用sendfile网络传输 过程:
硬盘 >> kernel buffer (快速拷贝到kernelsocket buffer) >>协议栈

Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http, server, location
未使用tcp_nopush网络资源:
tcp传输数据会带一个40字节长的包头,应用程序每次操作都会发送一个包,每个包都会加包头
于是产生4000%的过载,很轻易地就能令网络发生拥塞
使用tcp_nopush网络资源:
不会每次操作都会发送一个包,会等待多个包一起发送,只用一个包头

Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context: http, server, location
数据包立即发送出去,由于Nagle和DelayedACK的原因,数据包的确认信息需要积攒到两个时才发送,长连接情况下,奇数包会造成延时40ms,所以tcp_nodelay会将ack立刻发出去

4.文件压缩 ngx_http_gzip_module 启动该模块,使文件传输前进行压缩,提升传输效率
Syntax: gzip on | off; # 开启或关闭压缩模块
Default: gzip off;
Context: http, server, location, if in location

Syntax: gzip_comp_level level; # 设置压缩级别
Default: gzip_comp_level 1;
Context: http, server, location

在nginx.conf的http模块添加
gzip on; gzip_http_version 1.1; gzip_comp_level 2; 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; gzip_static on;

压缩包和图片类对象本身已经自带压缩功能。所以压缩比例较小低。文本类对象在压缩试验中,压缩比例体现优越。
5.状态访问统计 ngx_http_stub_status_module
server{location ~ /status {# 启动该模块stub_status on; access_log off; }}

status页面:
nginx|nginx那点事儿——nginx模块
文章图片

102为连接总数 102为成功连接的数量 289为共处理的请求数
Reading: 0 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头
Waiting: 1 等待的请求数,开启了keepalive 这个值等于active - (reading + writing)
keepalive_timeout
httpd守护进程,因为网页每次访问都需要tcp三次握手建立连接,然后http建立请求页面,最后tcp四次挥手断开连接
keepalive_timeout 设置的时间是当tcp建立连接的时候不立刻断开连接 而是等待一段时间
防止客户端和服务端频繁的建立和端来连接而造成的资源浪费
vim /etc/nginx/nginx.confkeepalive_timeout 65; # 默认参数等待65s改为:keepalive_timeout 0;

更改完配置后再次访问status页面,会发现Reading、Writing、Waiting次数一样,说明nginx每处理完一次请求都会断开。
6.防盗链 ngx_http_referer_module Syntax: valid_referers none | blocked | server_names | string …;
Default: —
Context: server, location

(1)盗链模拟
创建两个虚拟主机 kong.conf liang.conf
server{listen 80; server_name web.kong.com; location /{access_log/var/log/nginx/kong.access.logmain; # 访问该界面会生成日志root /usr/share/nginx/html; index kong.html index.html; }}server{listen 80; server_name web.liang.com; location /{access_log/var/log/nginx/liang.access.logmain; root /; index liang.html; }}vim kong.htmlnginx|nginx那点事儿——nginx模块
文章图片

5. 编译完成之后,将新生成的二进制文件拷贝到nginx目录下
make*注:这里不要执行make install,我们只需要通过make将新增模块编译进来,生成新的二进制文件,在objs目录下。千万不要执行make instlall ,make install 会重新安装nginx,覆盖原有nginxpwd /root/nginx-1.20.1/objsls addonMakefilenginx.8ngx_auto_headers.hngx_modules.o autoconf.errnginxngx_auto_config.hngx_modules.csrccp nginx /usr/local/nginx/sbin/

  1. 检查模块,并重启nginx
/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) built with OpenSSL 1.0.2k-fips26 Jan 2017 TLS SNI support enabled configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/root/nginx-1.20.1/nginx-module-vts

  1. 测试新安装的模块
新增nginx配置: http { vhost_traffic_status_zone; ...server { location /status { listen 81; vhost_traffic_status_display; vhost_traffic_status_display_format html; } } }重启nginx /usr/local/nginx/sbin/nginx -s reload

【nginx|nginx那点事儿——nginx模块】nginx|nginx那点事儿——nginx模块
文章图片

    推荐阅读