Web进阶Nginx常用模块
Web进阶Nginx常用模块
Nginx 目录索引模块:ngx_http_autoindex_module
目录索引模块简述
ngx_http_autoindex_module 模块处理以斜杠字符('/')结尾的请求,并生成目录列表。
当ngx_http_index_module 模块找不到索引文件时,通常会将请求传递给 ngx_http_autoindex_module 模块。
autoindex语法
Syntax: autoindex on | off;
Default:
autoindex off;
Context: http, server, location
例:
server{
# 监听80端口
listen 80;
# 指定访问的域名
server_name game.drz.com;
# 配置URL
location / {
# 站点目录
root /code/h5_games;
# 指定主页面
autoindex on;
}
}
autoindex的优化
server{
# 监听80端口
listen 80;
# 指定访问的域名
server_name game.drz.com;
# 配置URL
location / {
# 站点目录
root /code/h5_games;
# 指定主页面
autoindex on;
## 修改时间为当前系统时间(不使用格林威治时间)
autoindex_localtime on;
## 显示文件大小(显示单位)
autoindex_exact_size off;
}
}
Nginx的状态模块:ngx_http_stub_status_module
ngx_http_stub_status_module
模块提供对基本状态信息的访问。
默认情况下不构建此模块,应使用--with-http_stub_status_module
配置参数启用它
配置
Syntax: stub_status;
Default: —
Context: server, location
配置Nginx status示例
状态模块,需要配置URL
server{
# 监听80端口
listen 80;
# 指定访问的域名
server_name game.drz.com;
# 配置URL
location / {
# 站点目录
root /code/h5_games;
# 指定主页面
autoindex on;
## 修改时间为当前系统时间(不使用格林威治时间)
autoindex_localtime on;
## 显示文件大小(显示单位)
autoindex_exact_size off;
}
location /nginx_status {
## 开启
stub_status;
}
}
Active connections # 当前活动的连接数
accepts # 当前的总连接数TCP
handled # 成功的连接数TCP
requests # 总的http请求数
Reading # 请求
Writing # 响应
Waiting # 等待的请求数,开启了keepalive
# 注意, 一次TCP的连接,可以发起多次http的请求, 如下参数可配置进行验证
keepalive_timeout 0; # 类似于关闭长连接
keepalive_timeout 65; # 65s没有活动则断开连接
Nginx访问控制模块
- 基于IP的访问控制
http_access_module
## 配置方法(通常allow和deny一起使用)
location / {
#允许访问
allow IP或者网段;
# 拒绝访问
deny IP或者网段,all;
}
例:
location / {
## 允许单个IP访问
allow 10.0.0.1;
## 允许一个网段访问
allow 10.0.0.0/24;
## 拒绝所有
deny all;
}
- 基于用户登陆认证
http_auth_basic_module
## 页面需要用户认证,使用htpasswd命令
# 1.安装httpd-tools工具
[root@web02 auth]# yum install -y httpd-tools
# 2.创建认证用户目录
[root@web02 auth]# mkdir /etc/nginx/auth
# 3.创建一个用户名和密码
[root@web02 auth]# htpasswd -b -c /etc/nginx/auth/zls_auth zls 123
Adding password for user zls
location /cc {
root /code/auth;
index index.html;
auth_basic "ruozhi ni cai bu dao";
auth_basic_user_file /etc/nginx/auth/zls_auth;
}
htpasswd -b -c 密码文件路径 用户名 密码
-c创建新文件
-b允许命令行输入密码
Nginx的访问限制模块
在企业中经常会遇到这种情况,服务器流量异常,负载过大等等。对于大流量恶意的攻击访问, 会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,请求数、进行限制。
ngx_http_limit_conn_module 模块可以根据定义的key来限制每个键值的连接数,如同一个IP来源的连接数。
limit_conn_module 连接频率限制
limit_req_module 请求频率限制
- ngx_http_limit_conn_module (限制连接数)
http{
...
## http层设置,针对远端的IP开辟一块内存空间,空间名称=zls_zone:空间大小1m
limit_conn_zone $remote_addr zone=zls_zone:1m;
...
server{
...
## server层调用,允许同时最高2个IP访问
limit_conn zls_zone 2;
...
}
}
- ngx_http_limit_req_module (限制请求频率)
http{
...
## 请求频率限制
limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
...
server{
...
location / {
limit_req zone=suibian burst=2 nodelay;
}
}
}
## http层设置
[root@web02 conf.d]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
## 连接数限制
limit_conn_zone $remote_addr zone=zls_zone:1m;
## 请求频率限制
limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
include /etc/nginx/conf.d/*.conf;
}
## server层或者location层调用
[root@web02 conf.d]# cat /etc/nginx/conf.d/game.drz.com.conf
server{
# 监听80端口
listen 80;
# 指定访问的域名
server_name game.drz.com;
limit_req zone=suibian burst=2 nodelay;
# 配置URL
location / {
# 站点目录
root /code/h5_games;
# 指定主页面
autoindex on;
autoindex_localtime on;
autoindex_exact_size off
}
location /aa {
stub_status;
allow 10.0.0.1;
deny all;
}
location /bb {
default_type text/html;
return 200 "tz";
}
location /cc {
root /code/auth;
index index.html;
auth_basic "ruozhi ni cai bu dao";
auth_basic_user_file /etc/nginx/auth/zls_auth;
}
}
Nginx Location
使用Nginx Location
可以控制访问网站的路径,但一个server
可以有多个location
配置, 多个location
的优先级该如何区分。
Location语法优先级排列
匹配符 | 匹配规则 | 优先级 |
---|---|---|
= | 精确匹配 | 1 |
^~ | 以某个字符串开头 | 2 |
~ | 区分大小写的正则匹配 | 3 |
~* | 不区分大小写的正则匹配 | 4 |
!~ | 区分大小写不匹配的正则 | 5 |
!~* | 不区分大小写不匹配的正则 | 6 |
/ | 通用匹配,任何请求都会匹配到 | 7 |