模块
标准的http功能模块集合,http://nginx.org/en/docs(可以查看更多的功能模块)
编译选项 | 作用 |
–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
编译选项 | 作用 |
–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
编辑配置文件
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就需要账号和密码才能进入