1.nginx的功能
web服务器,代理,负载均衡,安全控制
2.nginx的优势
轻量,开源,高性能,高可靠,模块化(功能,代码),配置可读性高,二次开发容易
3.nginx应用场景
web应用,缓存,代理,负载均衡,安全访问
4.nginx的安装
epel源,官方源,源码
5.nginx的配置文件
/etc/nginx/nginx.conf
核心模块
事件模块
HTTP模块
server模块
location
/etc/nginx/conf.d/*.conf
服务管理
nginx.service
systemctl reload nginx
systemctl start nginx
nginx -v #版本
nginx -V #编译选项
nginx -t #语法测试
一、nginx目录索引
默认不允许列出整个目录浏览下载
syntax: autoindex on | off
default: autoindex off;
context: http, server, location
autoindex_exact_size off;
默认为on,显示出文件的大小,单位:bytes
修改为off,显示文件大概大小,单位kB、MB、BG
autoindes_localtime on;
默认为off,显示文件为GMT时间,文件上传的时间
修改为on,显示为服务器时间,文件上传的时间
location /download {
root /oldboy_code;
autoindex on;
charset utf-8,gbk; #中文乱码解析
autoindex_exact_size off;
autoindex_localtime on;
}
# download目录 在oldboy_code 下
mkdir /oldboy_code/zuoye
将源码解压到zuoye目录中
vi zuoye.conf
server {
listen 80;
server_name upload.oldboy.com;
location / {
root /oldboy_code/zuoye;
index index.html;
}
}
nginx -t #测试
systemctl reload nginx
tail /var/log/nginx/error.log
二、nginx状态监控
--with-http_stub_status_module模块支持
syntax: stub_status
defautl: -
context: server,location
nginx -V &> 1.txt
grep status 1.txt 查看是否安装了模块
vim game.conf
server {
listen 80;
server_name game.oldboy.com;
location /nginx_status {
stub_status;
access_log off;
}
}
nginx -t
systemctl reload nginx
systemctl restart nginx #清空所有连接数
http://IP/nginx_status/
vi nginx.conf #主配置文件
keepalive_timeout 0; #测试短和长连接,刷新status
三、nginx访问控制
基于IP的访问控制:http_access_module
//允许配置语法
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
两种写法:
先写允许,默认拒绝
先写拒绝,默认允许
从上往下匹配。
1.实例,只允许固定IP访问status
vim game.conf
server {
listen 80;
server_name game.oldboy.com;
location /nginx_status {
stub_status;
access_log off;
allow 10.0.0.1;
deny all;
}
}
基于用户登陆认证:http_auth_basci_module
//配置语法
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
yum install https-tools #生成密码工具 ab工具也是这个包
htpasswd -b -c /etc/nginx/auth_conf oldboy 123456
实例:
vim game.conf
server {
listen 80;
server_name game.oldboy.com;
location /nginx_status {
stub_status;
access_log off;
allow 10.0.0.1;
deny all;
auth_basic "Don't test, get out !"
auth_basic_user_file /etc/nginx/.auth.conf
}
}
四、nginx访问限制
ngx_http_limit_conn_module #根据定义的key来限制每个键值的连接数。
limit_conn_module #连接频率限制
连接限制语法:
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
变量:
binary_remote_addr 固定长度4字节
remote_addr 固定长度7-15字节
案例:
vi game.conf
http {
//http段配置连接限制,同一时刻只允许一个客户端ip连接
limit_conn_zone $binary_remote_addr zone=conn_game:10m; #IP有多少,1个ip4个字节,10m够用
...
server {
...
location / {
//同一个时刻只允许一个客户端IP连接
limit_conn conn_game 1;
}
}
}
nginx -t
nginx -s reload
limit_req_module #请求频率限制,优化中,使用这个优化,限制单个IP在1s内的请求数
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
vim game.conf
http {
//http配置请求限制,rate限制速率,限制1s最多1个请求
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
..
server {
location / {
//1r/s只接收1个请求,其余拒绝,返回错误码
limit_req zone=req_zone;
//请求超过1r/s,其他被延迟处理,请求超过burst,其他返回503
limit req_zone=req_zone burst=3 nodelay;
}
}
}