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. CF987C Three displays【一维DP/类似最大子序列和】

    [链接]:CF987C [分析]:先求出每个s[i]后面比s[i]大的c[i]的最小值,然后枚举前两个数c(i),c(j)以及 j 后面递增且存在最小值的dp(j) [代码]: #include< ...

  2. Python与数据库[1] -> 数据库接口/DB-API[0] -> 通用标准

    数据库接口 / DB-API 在Python中,数据库是通过适配器(Adaptor)来连接访问数据库的,适配器通常与数据库客户端接口(通常为C语言编写)想连接,而不同的适配器都会尽量满足相同的DB-A ...

  3. POJ 1741 Tree 树的分治

    原题链接:http://poj.org/problem?id=1741 题意: 给你棵树,询问有多少点对,使得这条路径上的权值和小于K 题解: 就..大约就是树的分治 代码: #include< ...

  4. yum安装openresty

    在群里看到春哥发的,先记录下来.一切都以官网为准,以后安装部署生态会越来越完善的. OpenResty 官方现在开始维护自己的打包虚机集合了,新的 linux 包仓库正在陆续登陆 openresty. ...

  5. kubernetes1.5.2--部署监控服务

    本文基于kubernetes 1.5.2版本编写 Heapster是kubernetes集群监控工具.在1.2的时候,kubernetes的监控需要在node节点上运行cAdvisor作为agent收 ...

  6. pycharm批量清楚pyc、$py.class文件

    By default, the .pyc and $py.class files are ignored, and thus are not visible in the Project tool w ...

  7. python数据类型学习心得

    python中的数据类型 数字:整型,长整形,布尔型,浮点型,复数 整型:普通的整数,在32位的操作系统中范围在-2的-32次方到2的32次方-1,64位的操作系统则为-2的64次方到2的64次方-1 ...

  8. Spring随笔之ApplicationContext

    前言 以前自己学习和实习的时候多次用过spring框架.对于我这种菜鸟来说,Spring给我的第一印象是好学,太TM好学了(抱歉没忍住脏话),跟着开发组熟悉几天就可以开始写代码,自我感觉代码敲得飞起~ ...

  9. mybatis 3简介

    http://www.mybatis.org/mybatis-3/zh/index.html

  10. 【Zookeeper】分布式服务框架 Zookeeper -- 管理分布式环境中的数据

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...