Nginx模块讲解
Nginx官方模块
编译选项 | 作用 |
---|---|
–with-http_stub_status_module | Nginx的客户端状态 |
http_stub_status_module配置
server {
listen 80; //确保端口不被占用
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
#添加内容
location /mystatus {
stub_status;
}
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
......
}
-
检查语法是否正确
nginx -tc /etc/nginx/nginx.conf -
没问题之后重载服务
nginx -s reload -c /etc/nginx/nginx.conf -
访问网址
ip:port/mystatusActive connections: 1 server accepts handled requests 255(处理握手次数) 255(处理连接数) 265(总的请求数) Reading: 0 Writing: 1 Waiting: 0
默认模块
编译选项 | 作用 |
---|---|
–with-http_random_index_ module | 目录中选择一个随机主页 |
http_random_index_ module配置
server {
listen 80; //确保端口不被占用
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /opt/app/code; ##文件夹中放3个html,访问主页之后回随机访问这3个html(不能以.xx.html命名)
random_index on; #默认为off
index index.html index.htm;
}
......
}
编译选项 | 作用 |
---|---|
–with-http_sub_module | http内容替换 |
–with-http_sub_module配置
server {
listen 80; //确保端口不被占用
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /opt/app/code; ##该目录下的html文件是要替换的内容
index index.html index.htm;
sub_filter '需要替换的字符串' '被替换的内容';##网页中需要替换的内容
sub_filter_once off; ##设置全局替换,而不是只替换一次
}
.......
}
Nginx的请求限制(压测工具 ab)
HTTP请求建立在一次TCP的连接基础上
一次TCP请求至少产生一次HTTP请求
limit_conn_zone $binary_remote_addr zone=conn_zone:1m;
limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s;
server {
listen 80; //确保端口不被占用
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
#添加内容
location /mystatus {
stub_status;
}
location / {
root /opt/app/code;
#limit_conn conn_zone 1; 限制连接数
#limit_req zone=req_zone burst=3 nodelay; 对前3个请求延迟响应,其他全部返回50X
#limit_req zone=req_zone burst=3;对前3个请求延迟响应,其他全部等待
#limit_req zone=req_zone;
index index.html index.htm;
}
......
}
Nginx的访问控制
- 基于IP的访问控制 ---- http_access_module
server {
listen 80; //确保端口不被占用
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
#添加内容
location /mystatus {
stub_status;
}
location / {
root /opt/app/code;
index index.html index.htm;
}
location ~ ^/admin.html {#模式匹配
root /opt/app/code;
deny XXX.XXX.XXX.XX;
allow all;
index index.html index.htm;
}
location ~ ^/admin.html {#模式匹配
root /opt/app/code;
allow XXX.XXX.XXX.XX
deny all;
index index.html index.htm;
}
......
}
局限性:你限制了ip1地址,但是你实际上用这个ip1去访问的时候采用了代理ip2,那么nginx认为的ip是代理的ip2,就不会限制ip1的地址
解决方法:
- 采用别的HTTP头信息访问控制,但是头信息可以呗修改 如:http_x_forwarded_for模块,http_x_forwarded_for=Client IP,Proxy(1) IP,Proxy(2) IP…
- 结合geo模块来解决
- 通过HTTP自定义变量传递,在HTTP头中自定义变量,一级一级的携带到后端
-
基于用户的信任登录----http_auth_basic_module
- 服务器安装htpasswd工具:yum install httpd-tools -y
- 生成密码文件,最好在文件上一级目录/etc/nginx: htpasswd -c ./auth_conf cyj
- 查看密码文件:more auth_conf
server { listen 80; //确保端口不被占用 server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; #添加内容 location /mystatus { stub_status; } location / { root /opt/app/code; index index.html index.htm; } location ~ ^/admin.html {#模式匹配 root /opt/app/code; auth_basic "XXXXXXXX请输入密码"; auth_basic_user_file /etc/nginx/auth_conf; #存放密码文件路径 index index.html index.htm; } ....... }
局限性:
- 用户信息依赖文件方式
- 操作管理机械,效率低下
解决方案:
- Nginx结合LUA实现高效验证
- Nginx和LDAP打通,利用nginx-auth-ldap模块