Day37nginx常用模块

需要的服务器

角色 外网ip 内网ip 主机名
web eth0:10.0.0.7 eth1:172.16.1.7 web01

autoindex 目录索引

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
    server {
        listen 80;
        server_name mirror.oldxu.com;
        charset utf8;

        location / {
            root /code;
            index index.html;

            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            autoindex_format html;
        }
    }
    
    [root@web01 ~]# mkdir /code/{centos,ubuntu}
    [root@web01 ~]# cat /code/index.html 
    <h1> Mirrors Oldxu.com </h1>
    <ul><li><a href="http://mirror.oldxu.com/centos" target="_blank">centos系统</a></li> </ul>
    <ul><li><a href="http://mirror.oldxu.com/ubuntu" target="_blank">ubuntu系统</a></li> </ul>

访问控制:
基于IP实现访问控制
10.0.0.1 仅允许访问 /centos
10.0.0.100 拒绝访问 /ubuntu , 其他的IP都允许

root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
        server {
            listen 80;
            server_name mirror.oldxu.com;
            charset utf8;
            root /code;

            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            autoindex_format html;

            location / {
                index index.html;
            }
            location /centos {
                allow 10.0.0.1/32;
                deny all;
            }
            location /ubuntu {
                deny 10.0.0.100/32;
                allow all;
            }
        }

基于用户名和密码的访问控制:
[root@web01 ~]# yum install httpd-tools -y
[root@web01 ~]# htpasswd -bc /etc/nginx/auth_conf oldxu 123

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
        server {
            listen 80;
            server_name mirror.oldxu.com;
            charset utf8;
            root /code;

            autoindex on;
            autoindex_exact_size off;
            autoindex_localtime on;
            autoindex_format html;

            location / {
                index index.html;
            }

            location /centos {
                allow 10.0.0.1/32;
                deny all;
            }
            location /ubuntu {
                auth_basic "Oldxu Site";
                auth_basic_user_file /etc/nginx/auth_conf;
            }
        }

限速
请求限制 limit_req
连接限制 limit_conn
下载限速:

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf 
    limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen 80;
        server_name mirror.oldxu.com;
        charset utf8;
        root /code;

        limit_req zone=req_one burst=5 nodelay;
        
        limit_conn addr 1;
        limit_conn_status 504;

        limit_rate 100k;
        limit_rate_after 200m;

        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        autoindex_format html;

        location / {
            index index.html;
        }

        location /centos {
            allow 10.0.0.1/32;
            allow 10.0.0.7/32;
            deny all;
        }
    }

案列
问题:限制web服务器请求数处理为1秒一个,缓存值为5、限制用户仅可同时下载一个文件。当下载超过100M则限制下载速度为500k。如果同时下载超过2个视频,则返回提示 "请联系oldxu进行会员充值"。

[root@web01 ~]# cat /etc/nginx/conf.d/mirror.oldxu.com.conf
    limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        listen 80;
        server_name mirror.oldxu.com;
        charset utf8;
        root /code;

        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
        autoindex_format html;

        location / {
            index index.html;
        }

        location /download {
            limit_req zone=req_one burst=5 nodelay;
            limit_conn addr 2;
            limit_conn_status 504;

            limit_rate 300k;
            limit_rate_after 100m;
        }
        #接收抛出504的异常,交给内部 @error_504 处理
        error_page 504 @error_504;
        location @error_504 {
            #default_type text/html;
            #return 200 "请充值会员";

            #跳转到其他页面
            #return 302 https://www.waitsun.com/xpay-html;
        }
    }

nginx七中状态 stub_stauts

状态 含义
Active connections 当前活跃连接数,包括Waiting等待连接数。
accepts 已接收的总TCP连接数量。
handled 已处理的TCP连接数量。
requests 当前总http请求数量。
Reading 当前读取的请求头数量
Writing 当前响应的请求头数量
Waiting 当前等待请求的空闲客户端连接数

状态监控模块

location = /nginx_status {
    stub_status;
}

location匹配规则
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }

    
    [root@web01 ~]# cat /etc/nginx/conf.d/location.oldxu.com.conf 
    server {
        listen 80;
        server_name location.oldxu.com;

        location = / {
            default_type text/html;
            return 200 'location = /';
        }

        location / {
            default_type text/html;
            return 200 'location /';
        }

        location /documents/ {
            default_type text/html;
            return 200 'location /documents/';
        }

        location ^~ /images/ {
            default_type text/html;
            return 200 'location ^~ /images/';


        }

        location ~* \.(gif|jpg|jpeg)$ {
            default_type text/html;
            return 200 'location ~* \.(gif|jpg|jpeg)';
        }
    }   

nginx 日志
访问日志 记录用户请求的信息
错误日志 记录所有错误信息,便于后期排查

server {
            access_log /var/log/nginx/vhost_name.log main;
            error_log /var/log/nginx/vhost_name_error.log;
        }
状态 含义
$remote_addr # 记录客户端IP地址 user --> web
$remote_user # 记录客户端用户名
$time_local # 记录通用的本地时间
$time_iso8601 # 记录ISO8601标准格式下的本地时间
$request # 记录请求的方法以及请求的http协议
$status # 记录请求状态码(用于定位错误信息)
$body_bytes_sent # 发送给客户端的资源字节数,不包括响应头的大小
$bytes_sent # 发送给客户端的总字节数
$msec # 日志写入时间。单位为秒,精度是毫秒。
$http_referer # 记录从哪个页面链接访问过来的
$http_user_agent # 记录客户端浏览器相关信息
$http_x_forwarded_for #记录客户端IP地址
$request_length # 请求的长度(包括请求行, 请求头和请求正文)。
$request_time # 请求花费的时间,单位为秒,精度毫秒

注:如果Nginx位于负载均衡器,nginx反向代理之后, web服务器无法直接获取到客 户端真实的IP地址。

# $remote_addr获取的是反向代理的IP地址。 反向代理服务器在转发请求的http头信息中,
# 增加X-Forwarded-For信息,用来记录客户端IP地址和客户端请求的服务器
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容