nginx內建模块使用

标签(空格分隔): nginx


© 版权声明:本文为博主原创文章,转载请注明出处

本文内容仅为个人理解,不保证完全正确

1. 內建模块的引入

安装nginx,只安装了核心模块,其他非核心模块都没有引入。因此当需要使用某个內建模块时需重新进行配置

1.1 查看安装信息

nginx -V # 查看安装信息,需要nginx配置到环境变量中,或者需要指定路径/home/*/nginx/sbin/nginx -

1.2 重新指定配置信息

假设以添加http_stub_status_module模块为例

  • nginx -V查看以前的配置信息

  • 将新模块的信息追加到后面,然后重新配置。注意是追加不是覆盖。比如原本的配置信息为./configure --prefix=/home/nginx/nginx,那么添加http_stub_status_module后的配置信息为./configure --prefix=/home/nginx/nginx --with-http_stub_status_module

  • 执行make命令,不能执行make install命令,否则会重新安装的

  • 备份sbin目录下的nginx文件mv ngnix ngnix.bak

  • 将解压目录下objs目录下重新生成的nginx文件复制到安装目录的sbin目录下cp /home/nginx/nginx-1.12.2/objs/nginx /home/nginx/nginx/sbin

  • 重新加载nginxnginx -s reload -c /home/nginx/nginx/conf/nginx.conf。有时重新加载nginx不能加载新模块,此时可以用kill关闭nginx,然后重启启动即可

cd /home/nginx/nginx-1.12.2/ # 切换到解压后的nginx目录下

./configure --prefix=/home/nginx/nginx --with-http_stub_status_module # 重新指定配置信息

make # 重新编译

cp /home/nginx/nginx/sbin/nginx /home/nginx/nginx/sbin/nginx.bak # 备份

cp /home/nginx/nginx-1.12.2/objs/nginx /home/nginx/nginx/sbin # 复制

nginx -s reload -c /home/nginx/nginx/conf/nginx.conf # 重新加载nginx

2. 內建模块的使用

2.1 http_stub_status_module

作用:展示nginx的一些状态信息

配置

Syntax: stub_status;

Default: -;

Context: server、location

样例

location /mystatus {

stub_status; # 查看nginx的一些状态信息

}

说明: 配置完成后,重新加载nginx,然后访问根据配置的名称进行访问即可查看nginx的状态信息

访问方式:http://nginx_ip:nginx_port/mystatus

字段说明

Active connections: 2

server accepts handled requests

5 5 23

Reading: 0 Writing: 1 Waiting: 1

其中Active connections:表示活跃的连接数

accepts:表示接收的握手的数量

handled:表示处理的数量。handled和accepts需要相等,表示没有丢失连接

requests:表示总的请求数

Reading:读取客户端的连接数

Writing:响应数据到客户端的数量

Waiting:开启keep-alive的情况下,等于Active connections-(Reading + Writing),表示nginx已经处理完正在等待下一次请求的驻留连接

2.2 http_random_index_module

作用:该模块的作用是随机显示主页

配置

Syntax: random_index on|off;

Default: random_index off;

Context: location

样例

location / {

        #root   html;
#index index.html index.htm;
root /home/nginx/Code; # 主页目录
random_index on; # 在主页目录下随机选择一个主页
}

说明:配置完成后,重新加载nginx,然后多次访问主页,此时nginx会自动从主页目录下随机选择一个html加载,但是不会加载隐藏文件

访问方式:http://nginx_ip:nginx_port/

2.3 http_sub_module

作用:将返回的内容进行HTTP内容替换

配置

  1. Syntax: sub_filter string replacement; 主要用于替换字符串

    Default: -;

    Context: http,server,location
  2. Syntax: sub_filter_last_modified on|off; 校验服务端的内容是否有变更,有就返回最新内容,主要用于缓存

    Default: sub_filter_last_modified off;

    Context: http,server,location
  3. Syntax: sub_filter_once on|off; 是否只替换第一个,默认是on;off则替换所有的

    Default: sub_filter_once on;

    Context: http,server,location

样例

location / {

root /home/nginx/Code;

index index.html;

sub_filter 'imooc' 'IMOOC';

sub_filter_once off;

}

说明:配置完成后,重新加载nginx,然后访问主页,此时会替换主页中所有的imooc为IMOOC

访问方式:http://nginx_ip:nginx_port/

2.4 limit_conn_module

作用:连接频率限制

配置

  1. Syntax: limit_conn_zone key zone=name:size存储连接状态,key存储键值,name唯一标识,size存储大小

    Default: -;

    Context: http
  2. Syntax: limit_conn zone number; zone对应limit_conn_zone中的name,number并发限制数

    Default: -;

    Context: http,server,location

样例

http {

limit_conn_zone $binary_remote_addr zone=conn_zone:1m;

server {

location / {

root /home/nginx/Code;

index index.html;

limit_conn conn_zone 1;

}

}

}

说明:配置完成后,重新加载nginx,然后使用ab进行测试。此时一个ip只能同一时刻只能建立一个连接

2.5 limit_req_module

作用:请求频率限制

配置

  1. Syntax: limit_req_zone key zone=name:size rate=rate; 存储请求状态,key存储键值,name唯一标识,size存储大小,rate请求速率限制(条/s)

    Default: -;

    Context: http
  2. Syntax: limit_req zone=name [burst=number] [nodelay]; name对应limit_req_zone中的name,burst表示延迟请求,number表示个数,即有number个请求会延迟到下一秒处理,nodelay表示剩余的都是立刻处理

    Default: —;

    Context: http,server,location

样例

http {

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

server {

location / {

root /home/nginx/Code;

index index.html;

        #limit_req zone=req_zone;
#limit_req zone=req_zone burst=3 nodelay;
limit_req zone=req_zone burst=3;
}
}

}

说明:配置完成后,重新加载nginx,然后使用ab进行压力测试

配置说明

limit_req zone=req_zone; 表明严格按照rate设置的速率处理请求,多余的请求直接舍弃

limit_req zone=req_zone burst=3 nodelay; 表明按照rate设置的速率处理请求,同时设置一个大小为3的缓存队列,当请求到来时可以爆发出一个峰值处理能力,处理缓存中的请求,其他的请求舍弃。

limit_req zone=req_zone burst=3; 表明按照rate设置的速率处理请求,同时设置一个大小为3的缓存队列,在缓存队列中的请求会等待慢慢处理,超过rate处理能力和缓存队列长度的请求直接舍弃。有延迟

参考http://blog.csdn.net/hellow__world/article/details/78658041

2.6 http_access_module

作用:限制某些IP地址的客户端访问

配置

  1. Syntax: allow address|CIDR|unix:|all; address:IP地址 CIDR:网段 unix:主要用于socket消息 all:允许所有的

    Default: -;

    Context: http,server,location,limit_except
  2. Syntax: deny address|CIDR|unix:|all; address:IP地址 CIDR:网段 unix:主要用于socket消息 all:阻止所有的

    Default: -;

    Context: http,server,location,limit_except

样例

location ~ ^/index {

root /home/nginx/Code;

deny 192.168.56.1; # 阻止192.168.56.1的IP访问

allow all; # 允许其他所有的IP访问

index index.html index.htm;

}

location ~ ^/index {

root /home/nginx/Code;

allow 192.168.56.1; # 只允许192.168.56.1的IP访问

deny all; # 阻止其他所有的IP访问

index index.html index.htm;

}

说明:配置完成后,重新加载nginx,使用不同的IP进行访问

局限性:如果是通过代理访问,这样IP控制就会失效。

解决方案

方法一:采用别的HTTP头信息控制访问,如HTTP_X_FORWARD_FOR。(HTTP_X_FORWARD_FOR只是一个规范,可能没有,也可能被修改)

方法二:采用geo模块控制

方法三:通过HTTP自定义变量传递

2.7 http_auth_basic_module

作用:基本身份验证

配置

  1. Syntax: auth_basic string | off # string:验证失败时提示的信息

    Default: auth_basic off;

    Context: http,server,location,limit_except
  2. Syntax: auth_basic_user_file file; # file:验证文件路径

    Default: -;

    Context: http,server,location,limit_except

样例

location / {

root /home/nginx/Code;

index index.html index.htm;

auth_basic "Auth access test!input your password!";

auth_basic_user_file /home/nginx/nginx/conf/conf.d/auth/auth_conf;

}

说明:auth_conf文件使用htpasswd生成,若未安装,可先使用yum -y install httpd-tools进行安装,然后用htpasswd -c ./auth_conf username按提示生成文件,重新加载nginx

局限性:用户信息依赖文件方式、操作管理机械,效率低下

解决方案

方法一:Nginx结合LUA实现高效验证

方法二:Nginx和LDAP打通,利用nginx-auth-ldap模块


更好的MarkDown体验:https://www.zybuluo.com/chy282/note/1042841

nginx內建模块使用的更多相关文章

  1. python內建模块之datetime

    from:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193755 ...

  2. Python 的內建模块

    >>> import __builtin__>>> dir(__builtin__)['ArithmeticError', 'AssertionError', 'A ...

  3. python快速学习-常用內建模块

  4. python学习(十五) 内建模块学习

    介绍python的几个內建模块,原文链接 1 python的时间模块datetime 取现在时间 from datetime import datetime now = datetime.now() ...

  5. Nginx SPDY Pagespeed模块编译——加速网站载入

    在看<Web性能权威指南>的时候,看到了SPDY这货,于是便开始折腾起了这个了,也顺便把pagespeed加了进去. Nginx SPDY 引自百科~~ SPDY(读作“SPeeDY”)是 ...

  6. Python3 内建模块 hashlib、itertools、HTMLParser、urllib

    Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...

  7. nginx源代码分析--模块分类

    ngx-modules Nginx 基本的模块大致能够分为四类: handler – 协同完毕client请求的处理.产生响应数据.比方模块, ngx_http_rewrite_module, ngx ...

  8. Nginx开发HTTP模块入门

    Nginx开发HTTP模块入门 我们以一个最简单的Hello World模块为例,学习Nginx的模块编写.假设我们的模块在nginx配置文件中的指令名称为hello_world,那我们就可以在ngi ...

  9. Python学习进程(8)字符串內建函数

        Python字符串內建函数实现了string模块的大部分方法,并包括了对Unicode编码方式的支持.     (1)capitalize(): 将字符串的第一个字母变成大写,其他字母变小写. ...

随机推荐

  1. PhpStorm 快捷键大全 PhpStorm 常用快捷键和配置+如何关闭快捷键ctrl+alt+方向键旋转屏幕

    如果映射的是eclipse的快捷键,又同时安装了英特尔的GPU软件,那么会有这个快捷键冲突 就是快速复制快捷键:ctrl+alt+方向键  会调用英特尔旋转屏幕,禁用掉即可 PhPStorm 是 Je ...

  2. HDU 1166.敌兵布阵-完全版线段树(单点增减、区间求和)

    生活艰辛,且行且珍惜. 先水一篇博客再去补题,要不然又忘记写博客了. 计划系统的刷一遍线段树专题,自己给自己找虐(自作孽不可活),从基础的到后面的,所有的都挂了题,刷题不,大兄弟? 线段树可真有意思, ...

  3. Codeforces Round #446 (Div. 2) C. Pride【】

    C. Pride time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  4. Sum of bit differences among all pairs

    This article was found from Geeksforgeeks.org. Click here to see the original article. Given an inte ...

  5. EF执行存储工程报错 String[4]: Size 属性具有无效大小值 0。

    EF中执行存储过程报错 String[4]: Size 属性具有无效大小值 0 排查后是如下问题所致,给定的参数没有设定大小(加入红框内的就可以了) private string GetCode(MC ...

  6. ARM32 Linux kernel virtual address space

    http://thinkiii.blogspot.jp/2014/02/arm32-linux-kernel-virtual-address-space.html   The 32-bit ARM C ...

  7. [置顶] kubernetes资源类型--ingress

    Ingress在K8S1.1之前还没有. 概念 Ingress是一种HTTP方式的路由转发机制,为K8S服务配置HTTP负载均衡器,通常会将服务暴露给K8S群集外的客户端. Ingress是一个允许入 ...

  8. hdu1021(C++)

    打表找规律,发现是n%4==2就是yes,否则是no #include<iostream>using namespace std;int main(){ int n; while (cin ...

  9. 【Hadoop】Flink VS Spark?Drill VS Presto?

    参考资料: drill 官网:http://drill.apache.org/ drill安装使用:https://segmentfault.com/a/1190000002652348 drill简 ...

  10. [转载]使用java.lang.Process类的简单例子

    FROM: http://segmentfault.com/blog/lidonghao/1190000000372192 ProcessBuilder类是J2SE 1.5在java.lang中新添加 ...