Nginx模块学习(二)

简介: Nginx模块学习(二)

模块

标准的http功能模块集合http://nginx.org/en/docs(可以查看更多的功能模块)

20190528223417121.png

编译选项 作用
–with-http_stub_status_module nginx客户端状态
    location /mystatus {
         stub_status;
    }

重写后判断nginx配置文件是否有语法错误

nginx -t -c /etc/nginx/nginx.conf
• 1

重新加载配置文件

nginx -s reload -c /etc/nginx/nginx.conf

访问地址http://192.168.254.130:8060/mystatus

20190528212821290.png

编译选项 作用
–with-http_sub_module http内容替换

使用方法,默认是替换第一个,如果需要替换全部可以添加

语法:sub_filter string replacement

默认是没有加的

配置文件可添加的地方:http,server,location

ub_filter 'abc' '123';
sub_filter_once off;

nginx请求限制

nginx限制请求数ngx_http_limit_req_module模块

1、键值的定义,就是限制的参数。这个在http里面设置。

limit_req_zone

语法: limit_req_zone $variable zone=name:size rate=rate;

默认值: none

配置段: http

例子:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

说明:区域名称为one,大小为10m,平均处理的请求频率不能超过每秒一次。

使用$binary_remote_addr变量, 可以将每条状态记录的大小减少到64个字节,这样1M的内存可以保存大约1万6千个64字节的记录。

2、设置对应的共享内存限制域和允许被处理的最大请求数阈值。

语法: limit_req zone=name [burst=number] [nodelay];

默认值: —

配置段: http, server, location

limit_req_zone $binary_remote_addr zone=ttlsa_com:10m rate=1r/s;
server {
    location /www.ttlsa.com/ {
        limit_req zone=ttlsa_com burst=5;
    }
}

限制平均每秒不超过一个请求,同时允许超过频率限制的请求数不多于5个。

如果不希望超过的请求被延迟,可以用nodelay参数,如:

limit_req zone=ttlsa_com burst=5 nodelay;

nginx限制连接数ngx_http_limit_conn_module模块

1、用于限制每个已定义键的连接数特别是来自单个IP地址的连接数。并不是所有的连接都被计算在内。只有当服务器处理了一个请求,并且整个请求头已经被读取时,才会计算连接。

limit_conn_zone

语法: limit_conn_zone $binary_remote_addr zone=addr:10m;

默认值: none

配置段: http

例子:limit_conn_zone $binary_remote_addr zone=addr:10m;


2、设置允许一个IP同时的连接数。

limit_conn

语法: limit_conn zone number;

默认值: none

配置段:http, server, location

例子:

limit_conn_zone $binary_remote_addr zone=addr:10m; 
server { 
     location /download/ {  
     limit_conn addr 1; 
 }

设置了内存空间的连接数,一旦超过,将会返回错误代码。一个IP同时只允许一个连接。

nginx访问控制

  • 基于IP的访问控制 http_access_module
  • 基于用户的信任登陆 http_auth_basic_module
    配置:server,http,location

Location配置

location的语法规则如下: location [=||*|^~] /uri/ { … }.


在nginx中location分为两类:普通location和正则location。普通 location ”是以“ = ”或“ ^~ ”为前缀或者没有任何前缀的 /uri/,包括“/”;“正则 location ”是以“ ~ ”或“ ~* ”为前缀的 /uri/ 。

标识符 描述
= 精确匹配;用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该location里面的请求。
~ 正则匹配;用于正则uri前,表示uri里面包含正则,并且区分大小写。
~* 正则匹配;用于正则uri前,表示uri里面包含正则,不区分大小写。
^~ 非正则匹配;用于标准uri前,nginx服务器匹配到前缀最多的uri后就结束,该模式匹配成功后,不会使用正则匹配。
普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。

http_access_module

对页面进行访问控制

    location ~ ^/1.html {
        root   /opt/app/code;
        deny 192.168.60.1;
        allow all;
        index  index.html index.htm;
    }

不与许192.168.60.1访问1.html这个页面。

http_access_module的局限性:如果有客户端使用代理的话nginx只能获取到代理的ip而不能得到客户端的真实ip。

改进方法:采用别的http头信息控制访问,如:HTTP_X_FORWARD_FOR

该信息头会把ip一层一层的往下传,一直往后面加。

http_auth_basic_module

用户登录认证

使用htpasswd生成账号和密码

需要安装httpd,才能使用htpasswd

yum install -y httpd-tools

指定文件并生成账号和密码

htpasswd -c ./auth_conf bushro

image.png

编辑配置文件

    location ~ ^/1.html {
        root   /opt/app/code;
        auth_basic "Auth access test!input your passwd!";
        auth_basic_user_file /etc/nginx/auth_conf;
        index  index.html index.htm;
    }

重新加载配置文件后再次访问1.html就需要账号和密码才能进入

20190603200752670.png

相关文章
|
1月前
|
负载均衡 应用服务中间件 数据处理
Nginx学习使用
Nginx学习使用
45 0
|
2月前
|
应用服务中间件 nginx
Nginx安装nginx-rtmp-module模块
【2月更文挑战第4天】 nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展。 nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最终生成一个名为nginx的可执行文件。
89 6
|
4月前
|
应用服务中间件 nginx
百度搜索:蓝易云【利用nginx内置ngx_http_mirror_module模块实现流量复制及流量放大】
以上就是使用Nginx内置 `ngx_http_mirror_module`模块实现流量复制和流量放大的简要示例。通过合理配置和利用该模块,可以实现更复杂的流量控制和调试需求。
63 1
|
9天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
20 3
|
2月前
|
应用服务中间件 Linux PHP
Linux下安装php环境并且配置Nginx支持php-fpm模块
Linux下安装php环境并且配置Nginx支持php-fpm模块
34 0
|
3月前
|
缓存 负载均衡 安全
Nginx 学习
Nginx 学习
30 0
|
3月前
|
消息中间件 关系型数据库 MySQL
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
使用Nginx的stream模块实现MySQL反向代理与RabbitMQ负载均衡
96 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx模块开发:handler模块实现
Nginx模块开发:handler模块实现
30 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现
Nginx模块开发:模块结构的源码阅读以及过滤器(Filter)模块的实现
72 0
|
4月前
|
存储 应用服务中间件 nginx
Nginx:过滤模块的实现
Nginx:过滤模块的实现