linux之nginx模块增加相关模块使用介绍

锺高翰
2023-12-01

已安装nginx增加模块流程

下载功能模块

wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

功能模块所需插件

yum install patch-2.7.1-12.el7_7.x86_64 -y
patch -p1 < /usr/src/nginx_upstream_check_module-master/check_1.16.1+.patch

查看版本信息

/usr/local/nginx/sbin/nginx  -V

nginx version: nginx/1.16.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --prefix=/usr/local/nginx

添加模块

./configure --prefix=/usr/local/nginx  --add-module=/usr/src/nginx_upstream_check_module-master/

重新编译

make && make install
make upgrade

常用模块

Nginx模块名称模块作用
ngx_http_upstream_module负载均衡模块,提供服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_access_module四层基于IP的访问控制,可以通过匹配客户端源IP地址进行限制
ngx_http_auth_basic_module状态页,使用basic机制进行用户认证,在编译安装nginx的时候需要添加编译参数–withhttp_stub_status_module,否则配置完成之后监测会是提示语法错误
ngx_http_stub_status_module状态统计模块
ngx_http_gzip_module文件的压缩功能
ngx_http_gzip_static_module静态压缩模块
ngx_http_ssl_modulenginx 的https 功能
ngx_http_rewrite_module重定向模块,解析和处理rewrite请求
ngx_http_referer_module防盗链功能,基于访问安全考虑
ngx_http_proxy_module将客户端的请求以http协议转发至指定服务器进行处理
ngx_stream_proxy_moduletcp负载,将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module将客户端对Python的请求以uwsgi协议转发至指定服务器处理
ngx_http_headers_module可以实现对头部报文添加指定的key与值
ngx_stream_upstream_module后端服务器分组转发、权重分配、状态监测、调度算法等高级功能
ngx_http_fastcgi_module实现通过fastcgi协议将指定的客户端请求转发至php-fpm处理
ngx_http_flv_module为flv伪流媒体服务端提供支持

限流模块(ngx_http_access_module)

格式:
allow address; //允许访问
deny address;  //拒绝访问

location / {
	root html;
	index index.html index.htm;
	allow 127.0.0.1; #允许本机地址访问
	deny 127.0.0.1; #拒绝本机地址访问
}

basic用户认证(ngx_http_auth_basic_module)

官网实例:
location / {
    auth_basic           "off";  //启用使用“HTTP基本身份验证”协议验证用户名和密码,默认off
    auth_basic_user_file conf/htpasswd;  //指定保存用户名和密码的文件
}
auth_basic_user_file文件格式:
name:password
name:password:comment
  1. 安装htpassd命令

    yum install -y httpd-tools
    
  2. 创建密码文件

    htpasswd -c /etc/nginx/passwd.db zhangsan
    New password:
    Re-type new password:
    Adding password for user zhangsan
    
  3. 添加用户

    htpasswd /etc/nginx/passwd.db lisi
    New password:
    Re-type new password:
    Adding password for user lisi
    

状态查看(ngx_http_stub_status_module)

  • 该模块可以输出nginx的基本状态信息 ,这个模块很重要,zabbix监控nginx就需要这个模块。可以监控nginx状态和nginx的连接数,这个模块不是默认添加的,需要手动添加该模块。
  • Nginx中的stub_status模块主要用于查看Nginx的一些状态信息,本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: ./configure –with-http_stub_status_module
//官网实例
location = /basic_status {
    stub_status;
}
//返回数据
Active connections: 291 
server accepts handled requests
16630948 16630948 31070465 
Reading: 6 
Writing: 179 
Waiting: 106 
  • Active connections: 当前活动的客户端连接数,包含Waiting 连接数。
  • accepts: 接受的客户端连接总数
  • handled: 已处理的连接总数,通常该参数值与 accepts 应该是一致的,除非得到某个限制(worker_connections).
  • requests: 客户端请求总数。
  • Reading: nginx 正在读取请求标头的当前连接数。
  • Writing: nginx 正在将响应写回到客户端的当前连接数。
  • Waiting: 当前等待请求的空闲客户端连接数。

文件压缩(ngx_http_gzip_module)

  • 允许使用gzip方式压缩响应内容。这种方式可以有效避免过大的通信内容占用过多的带宽。
  • 使用SSL/TSL协议时,压缩的响应可能会受到BREACH攻击。
  • 网站开启gzip以后,会将输出到用户浏览器的数据进行压缩处理,这样会减小通过网络传输的数据量,达到提升网页加载速度、提升用户浏览体验。
  • gzip压缩算法属于依赖CPU型操作,在服务器端大量的资源进行gzip压缩,会占用服务器CPU和磁盘资源。但对于目前CPU性能来说,其影响微乎其微。
location / {
	gzip on;
	gzip_buffers 4 8k;
	gzip_comp_level 6;
	gzip_disable "MSIE [1-6]\.";
	gzip_http_version 1.1;
	gzip_min_length 1000;
	gzip_proxied any;
	gzip_vary on;
	gzip_types text/plain text/css application/javascript application/x-javascript text/xml 		application/xml application/xml+rss text/javascript application/json image/jpeg image/gif 		image/png image/jpg;	
}
  • gzip : 启用或禁用回应的gzip,默认off;
  • gzip_buffers:设置用于压缩响应的缓冲区的数量number和大小size。默认情况下,缓冲区大小等于一个内存页(4K 或 8K,取决于平台),默认32 4k|16 8k;
  • gzip_comp_level:设置响应的 gzip 压缩级别level,值的范围为 1 到 9,默认为1;
  • gzip_disable:禁用对与任何指定正则表达式匹配的 User-Agent 头字段的请求响应做 gzip 处理;
  • gzip_min_length:设置被压缩响应的最小长度。该长度仅由 Content-Length 响应头字段确定,默认20;
  • gzip_http_version:设置压缩响应一个请求所需的最小 HTTP 版本,默认1.1;
  • gzip_proxied:根据请求和响应,启用或禁用针对代理请求的响应的 gzip。事实上请求被代理取决于 Via 请求头字段是否存在。该指令接受多个参数:
    • off禁用所有代理请求压缩,忽略其他参数
    • expired如果响应头包含 Expires” 字段并且其值为禁用缓存,则启用压缩
    • no-cache如果响应头包含具有 no-cache 参数的 Cache-Control 字段,则启用压缩
    • no-store如果响应头包含具有 no-store 参数的 Cache-Control 字段,则启用压缩
    • private如果响应头包含带有 private 参数的 Cache-Control 字段,则启用压缩
    • no_last_modified如果响应头不包含 Last-Modified 字段,则启用压缩
    • no_etag如果响应头不包含 ETag 字段,则启用压缩
    • auth如果请求头包含 Authorization 字段,则启用压缩
    • any为所有代理请求启用压缩
  • gzip_types:除了 text/html 之外,还可以针对指定的 MIME 类型启用 gzip 响应。特殊值 * 匹配任何 MIME 类型(0.8.29)。对 text/html 类型的响应始终启用压缩。
  • gzip_vary:指令 gzipgzip_staticgunzip 处于激活状态,则启用或禁用插入 Vary:Accept-Encoding 响应头字段。

首次安装

nginx编译和安装时,需要把–with-http_ssl_module加在./configure后面,如果需要加载gzip模块,需要把–with-http-gzip-static-module加在./configure后面。

被动检查模块(ngx_http_upstream_module)

ngx_http_upstream_module,可以做到基本的健康检查。

upstream指令块中的server子指令参数:max_fails、fail_timeout

upstream backend {
	server 127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=10s;
}
  • max_fails=2的意思是设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。失败的尝试次数默认是1。
  • fail_timeout=10s是设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒。

主动健康检查(nginx_upstream_check_module)

下载地址

github地址:https://github.com/yaoweibin/nginx_upstream_check_module
taobao官网:http://tengine.taobao.org/document_cn/http_upstream_check_cn.html

nginx 需要添加nginx_upstream_check_module 模块,用于对后端服务器的健康情况检测,如果后端服务器不可用,则把这台服务器移除负载均衡轮循集群,所有的请求不往这台服务器上转发,待这台服务器恢复正常后,再把这台加入到负载均衡集群。

http {
    upstream cluster1 {
     # simple round-robin
     server 192.168.0.1:80;
     server 192.168.0.2:80;
     check interval=3000 rise=2 fall=5 timeout=1000 type=http;
     check_http_send "HEAD / HTTP/1.0\r\n\r\n";
     check_http_expect_alive http_2xx http_3xx;
   }
    upstream cluster2 {
     # simple round-robin
     server 192.168.0.3:80;
     server 192.168.0.4:80;
     check interval=3000 rise=2 fall=5 timeout=1000 type=http;
     check_keepalive_requests 100;
     check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n";
     check_http_expect_alive http_2xx http_3xx;
  }
    server { 
      listen 80;
      location /1 {
       proxy_pass http://cluster1;
      }
      location /2 {
       proxy_pass http://cluster2;
      }
     location /status {
       check_status;
       access_log   off;
       allow SOME.IP.ADD.RESS;
       deny all;
     }
   }
}
  • interval:向后端发送的健康检查包的间隔,单位为毫秒。
  • fall(fall_count): 如果连续失败次数达到fall_count,服务器就被认为是down。
  • rise(rise_count): 如果连续成功次数达到rise_count,服务器就被认为是up。
  • timeout: 后端健康请求的超时时间。
  • default_down: 设定初始时服务器的状态,如果是true,就说明默认是down的,如果是false,就是up的。默认值是true,也就是一开始服务器认为是不可用,要等健康检查包达到一定成功次数以后才会被认为是健康的。
  • type:健康检查包的类型,现在支持以下多种类型
    • tcp:简单的tcp连接,如果连接成功,就说明后端正常。
    • ssl_hello:发送一个初始的SSL hello包并接受服务器的SSL hello包。
    • http:发送HTTP请求,通过后端的回复包的状态来判断后端是否存活。
    • mysql: 向mysql服务器连接,通过接收服务器的greeting包来判断后端是否存活。
    • ajp:向后端发送AJP协议的Cping包,通过接收Cpong包来判断后端是否存活。
    • port: 指定后端服务器的检查端口。可以指定不同于真实服务的后端服务器的端口,比如后端提供的是443端口的应用,你可以去检查80端口的状态来判断后端健康状况。默认是0,表示跟后端server提供真实服务的端口一样。
  • check_http_expect_alive:指定主动健康检查时HTTP回复的成功状态
    • 推荐采用”HEAD”方法。当采用长连接进行健康检查时,需在该指令中添加keep-alive请求头,如:”HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”。同时,在采用”GET”方法的情况下,请求uri的size不宜过大,确保可以在1个interval内传输完成,否则会被健康检查模块视为后端服务器或网络异常。
  • check_http_send:配置http健康检查包发送的请求内容
    • Syntax: check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]
    • Default: http_2xx | http_3xx
 类似资料: