首页 > 其他 > 详细

第九章?Nginx常用基础模块

时间:2021-03-02 14:32:57      阅读:34      评论:0      收藏:0      [点我收藏+]

1、nginx目录索引

1.1、目录索引模块简述

ngx_http_autoindex_module模块处理以斜杠字符(‘/‘)结尾的请求,并生成目录列表。

当ngx_http_index_module模块找不到索引文件时,通常会将请求传递给ngx_http_autoindex_module模块

1.2、配置

Nginx默认是不允许列出整个目录浏览下载。

Syntax: autoindex on | off;

Default: autoindex off;

Context: http, server, location

 

# autoindex常用参数

autoindex_exact_size off;

默认为on, 显示出文件的确切大小,单位是bytes。

修改为off,显示出文件的大概大小,单位是kB或者MB或者GB。

 

autoindex_localtime on;

默认为off,显示的文件时间为GMT时间。

修改为on, 显示的文件时间为文件的服务器时间。

 

charset utf-8,gbk;

默认中文目录乱码,添加上解决乱码。

配置示例:

[root@web01 conf.d]# vim module.conf

 

server {

listen 80;

server_name www.sunedu.com;

charset utf-8,gbk;

 

location / {

root /www;

index index.html index.htm;

}

location /download {

alias /module;

autoindex on;

autoindex_exact_size off;

autoindex_localtime on;

}

}

[root@web01 conf.d]# mkdir /module

[root@web01 conf.d]# touch /module/file{1..10}.txt

[root@web01 conf.d]#

[root@web01 conf.d]# systemctl restart nginx

测试:

技术分享图片

2、nginx状态监控

ngx_http_stub_status_module模块提供对基本状态信息的访问。

默认情况下不构建此模块,应使用--with-http_stub_status_module配置参数启用它

2.1、配置

Syntax: stub_status;

Default: —

Context: server, location

配置Nginx status示例

[root@web01 conf.d]# vim module.conf

server {

listen 80;

server_name www.sunedu.com;

charset utf-8,gbk;

 

location / {

root /www;

index index.html index.htm;

}

location /download {

alias /module;

autoindex on;

autoindex_exact_size off;

autoindex_localtime on;

}

location /nginx_status {

stub_status;

}

}

[root@web01 conf.d]# systemctl restart nginx

测试:

技术分享图片

Active connections # 当前活动的连接数

accepts # 当前的总连接数TCP

handled # 成功的连接数TCP

requests # 总的http请求数

 

Reading # 请求

Writing # 响应

Waiting # 等待的请求数,开启了keepalive

 

# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证

keepalive_timeout 0; # 类似于关闭长连接

keepalive_timeout 65; # 65s没有活动则断开连接

3、nginx访问控制

基于IP的访问控制 http_access_module

基于用户登陆认证 http_auth_basic_module

3.1、nginx基于IP的访问控制

#允许配置语法

Syntax: allow address | CIDR | unix: | all;

Default: —

Context: http, server, location, limit_except

 

#拒绝配置语法

Syntax: deny address | CIDR | unix: | all;

Default: —

Context: http, server, location, limit_except

  • 访问控制配置示例,拒绝指定的IP,其他全部允许

[root@web01 conf.d]# vim module.conf

 

server {

listen 80;

server_name www.sunedu.com;

charset utf-8,gbk;

 

location / {

root /www;

index index.html index.htm;

}

location /download {

alias /module;

autoindex on;

autoindex_exact_size off;

autoindex_localtime on;

}

location /nginx_status {

stub_status;

deny 10.0.0.1;

allow all;

}

}

[root@web01 conf.d]# systemctl restart nginx

测试

技术分享图片

技术分享图片

  • 访问控制配置示例, 只允许谁能访问, 其它全部拒绝

[root@web01 conf.d]# vim module.conf

server {

listen 80;

server_name www.sunedu.com;

charset utf-8,gbk;

 

location / {

root /www;

index index.html index.htm;

}

location /download {

alias /module;

autoindex on;

autoindex_exact_size off;

autoindex_localtime on;

}

location /nginx_status {

stub_status;

allow 10.0.0.0/24;

allow 127.0.0.1;

deny all;

}

3.2、nginx基于用户登入认证

#访问提示字符串

Syntax: auth_basic string| off;

Default: auth_basic off;

Context: http, server, location, limit_except

 

#账户密码文件

Syntax: auth_basic_user_file file;

Default: -

Context: http, server, location, limit_except

  • 基于用户登入认证配置实践

[root@web01 conf.d]# vim module.conf

server {

listen 80;

server_name www.sunedu.com;

charset utf-8,gbk;

 

location / {

root /www;

index index.html index.htm;

}

location /download {

alias /module;

autoindex on;

autoindex_exact_size off;

autoindex_localtime on;

auth_basic "download your Passwd!";

auth_basic_user_file auth_conf;

}

location /nginx_status {

stub_status;

allow 10.0.0.0/24;

allow 127.0.0.1;

"module.conf" 24L, 413C written

[root@web01 conf.d]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@web01 conf.d]# systemctl restart nginx

测试

技术分享图片 技术分享图片

4、nginx访问控制

在企业中经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问, 会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数、进行限制。

 

ngx_http_limit_conn_module模块可以根据定义的key来限制每个键值的连接数,如同一个IP来源的连接数。

 

limit_conn_module 连接频率限制

 

limit_req_module 请求频率限制

4.1、nginx连接限制配置实战

  • nginx连接限制配置语法

#模块名ngx_http_limit_conn_module

Syntax: limit_conn_zone key zone=name:size;

Default: —

Context: http

 

Syntax: limit_conn zone number;

Default: —

Context: http, server, location

  • nginx连接限制配置实践

    在一个公网Nginx中配置

     

http{ #http层,设置

# Limit settings

limit_conn_zone $remote_addr zone=conn_zone:10m;

server{ #server层调用

#连接限制,限制同时最高1个连接

limit_conn conn_zone 1;

}

}

  • 使用ad 工具进行压力测试

[root@web01 ~]# yum install -y httpd-tools

[root@web01 ~]# ab -n 20 -c 2 http://127.0.0.1/index.html

  • nginx日志结果

[root@web01 ~]# yum install -y httpd-tools

2018/10/24 18:04:49 [error] 28656#28656: *1148 limiting connections by zone "conn_zone", client: 123.66.146.123, server: xxxxxx, request: "GET / HTTP/1.0", host: xxxxxx

2018/10/24 18:04:49 [error] 28656#28656: *1155 limiting connections by zone "conn_zone", client: 123.66.146.123, server: xxxxxx, request: "GET / HTTP/1.0", host:

2018/10/24 18:04:49 [error] 28656#28656: *1156 limiting connections by zone "conn_zone", client: 123.66.146.123, server: xxxxxx, request: "GET / HTTP/1.0", host: xxxxxx

 

4.2、nginx请求限制配置实战

  • Nginx请求限制配置语法

#模块名ngx_http_limit_req_module

Syntax: limit_req_zone key zone=name:size rate=rate;

Default: —

Context: http

 

Syntax: limit_req zone number [burst=number] [nodelay];

Default: —

Context: http, server, location

  • Nginx请求限制配置实战

# http标签段定义请求限制, rate限制速率,限制一秒钟最多一个IP请求

http {

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

}

server {

listen 80;

server_name module.oldboy.com;

# 1r/s只接收一个请求,其余请求拒绝处理并返回错误码给客户端

#limit_req zone=req_zone;

 

# 请求超过1r/s,剩下的将被延迟处理,请求数超过burst定义的数量, 多余的请求返回503

limit_req zone=req_zone burst=3 nodelay;

location / {

root /code;

index index.html;

}

}

  • 使用ab工具进行压力测试

[root@sunedu ~]# yum install -y httpd-tools

[root@sunedu ~]# ab -n 20 -c 2 http://127.0.0.1/index.html

  • nginx日志结果

2018/10/24 07:38:53 [error] 81020#0: *8 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: xxxxxx, request: "GET /index.html HTTP/1.0", host: "10.0.0.10"

2018/10/24 07:38:53 [error] 81020#0: *9 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: xxxxxx, request: "GET /index.html HTTP/1.0", host: "10.0.0.10"

2018/10/24 07:38:53 [error] 81020#0: *10 limiting requests, excess: 3.998 by zone "req_zone", client: 10.0.0.10, server: xxxxxx, request: "GET /index.html HTTP/1.0", host: "10.0.0.10"

  • nginx请求限制重定向(扩展)

    在nginx请求限制的过程中,我们可以自定义一个返回值,也就是错误页面的状态码。

    默认情况下是503

    技术分享图片

     

  • 修改默认返回状态码

server {

listen 80;

server_name module.driverzeng.com;

charset utf-8,gbk;

 

location / {

root /code;

index index.html index.htm;

limit_req zone=req_zone burst=3 nodelay;

#修改返回状态码为:478

limit_req_status 478

}

}

 

4.3、Nginx连接限制没有请求限制有效?

我们先来回顾一下http协议的连接与请求,首先HTTP是建立在TCP基础之上,在完成HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上在完成HTTP的请求。

 

所以多个HTTP请求可以建立在一次TCP连接之上, 那么我们对请求的精度限制,当然比对一个连接的限制会更加的有效,因为同一时刻只允许一个TCP连接进入, 但是同一时刻多个HTTP请求可以通过一个TCP连接进入。所以针对HTTP的请求限制才是比较优的解决方案。

 

5、Nginx Location

使用Nginx Location可以控制访问网站的路径,但一个server可以有多个location配置, 多个location的优先级该如何区分

5.1、Location语法示例

location [=|^~|~|~*|!~|!~*|/] /uri/ { ...

}

5.2、Location语法优先级排列

匹配符

匹配规则

优先级

=

精确匹配

1

^~

以某个字符串开头

2

~

区分大小写的正则匹配

3

~*

不区分大小写的正则匹配

4

!~

区分大小写不匹配的正则

5

!~*

不区分大小写不匹配的正则

6

/

通用匹配,任何请求都会匹配到

7

5.3、配置网站盐城location优先级

[root@web01 conf.d]# vim test.conf

server_name www.sunedu.com;

 

location / {

default_type test/html;

return 200 "location /";

}

 

location =/ {

default_type test/html;

return 200 "location =/";

}

 

location ~ / {

default_type test/html;

return 200 "location ~/";

}

 

location ^~ {

default_type test/html;

return 200 "location ^~";

}

}

5.4、测试location效果

# 优先级最高符号=

[root@web01 conf.d]# curl 127.0.0.1

location =/

 

# 注释掉精确匹配=, 重启Nginx

[root@web01 conf.d]# curl 127.0.0.1

location ~/

 

# 注释掉~, 重启Nginx

[root@web01 conf.d]# curl 127.0.0.1

location /

5.5、location应用场景

# 通用匹配,任何请求都会匹配到

location / {

...

}

 

# 严格区分大小写,匹配以.php结尾的都走这个location

location ~ \.php$ {

...

}

 

# 严格区分大小写,匹配以.jsp结尾的都走这个location

location ~ \.jsp$ {

...

}

 

# 不区分大小写匹配,只要用户访问.jpg,gif,png,js,css 都走这条location

location ~* .*\.(jpg|gif|png|js|css)$ {

...

}

 

# 不区分大小写匹配

location ~* "\.(sql|bak|tgz|tar.gz|.git)$" {

...

}

第九章?Nginx常用基础模块

原文:https://www.cnblogs.com/sunyuhang1/p/14468189.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!