zoukankan      html  css  js  c++  java
  • linux---集群架构初探(17)Nginx基础模块

    官方文档:http://nginx.org/en/docs/

    一、索引目录(ngx_http_autoindex_module

    nginx默认不允许使用索引目录,自定义配置文件/etc/nginx/conf.d/pm.conf

    二、状态监控(ngx_http_stub_status_module

     在/etc/nginx/conf.d/pm.conf的server区块中添加

    注:因为这个页面是不对外开放的,只是运维人员便于监控,所以没必要记录日志。

    访问网址 http://192.168.1.7/pm_stub_status

    此时刷新页面,requests数会增加,因为TCP是长连接,只有在超时后刷新才会再次尝试连接,在/etc/nginx/nginx.conf中

    代表连接65s后超时,如果将该值设置为0,再刷新页面时,每次刷新上述3个值都会增加(在成功连接的情况下)

    注:如果使用restart重启服务,上述3个连接数都会被重置,而使用reload则不会。

    三、访问控制

    基于IP的访问控制:ngx_http_access_module

    控制顺序:从上向下,匹配成功即停止。

    企业思路:1.先写允许的ip,最后拒绝所有。2.先写拒绝的ip,最后允许所有

    如监控的页面,我们只希望内网或某个ip能访问,可以这么写。

    基于用户登陆认证的访问控制:ngx_http_auth_basic_module

    首先配置用户名密码文件

    配置需要登陆的页面(/etc/nginx/conf.d/pm.conf)

    重启服务访问页面:

    四、访问限制(ngx_http_limit_conn_module

    通过对同一个ip的连接数,并发数进行限制,来抵御大流量的恶意攻击访问。

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

    HTTP请求建立在一次TCP连接上,一次TCP连接至少会产生一次HTTP请求。(三次握手-->http请求和响应-->四次挥手)

    限制ip连接数

    变量:

    $binary_remote_addr  长度固定为4字节,正好能保存一个ip地址的长度,32位

    $remote_addr      长度为7~15字节

    限制请求频率(ngx_http_limit_req_module

    limit_req zone=req_pm burst=3 nodelay; 每秒超出的请求数作延迟处理,若再超出burst的值,则返回503

    使用ab工具进行压力测试(需先安装httpd-tools)

    ab -n 20 -c 10 http://192.168.1.7/index.html

    意思是有10个连接同时每次进行20次请求

    五、日志配置(ngx_http_log_module

     access_log代表成功访问的日志  error_log代表出现错误的日志

    log_format用于设置日志的格式,main为其格式名

    • $remote_addr  记录客户端IP地址
    • $remote_user 记录客户端用户名称
    • $request 记录请求的URL和HTTP协议(GET,POST,DEL,等)
    • $status 记录请求状态
    • $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。
    • $bytes_sent 发送给客户端的总字节数。
    • $connection 连接的序列号。
    • $connection_requests 当前通过一个连接获得的请求数量。
    • $msec 日志写入时间。单位为秒,精度是毫秒。
    • $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。
    • $http_referer 记录从哪个页面链接访问过来的
    • $http_user_agent 记录客户端浏览器相关信息
    • $request_length 请求的长度(包括请求行,请求头和请求正文)。
    • $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。
    • $time_iso8601 ISO8601标准格式下的本地时间。
    • $time_local 通用日志格式下的本地时间。
    • $http_x_forwarded_for 若客户端使用代理,会记录原始ip地址

    access_log off;  代表关闭日志记录

    error_log 路径 级别

    • debug:调试级别,记录的信息最多;
    • info:普通级别;
    • notice:可能需要注意的信息;
    • warn:警告消息;
    • error:错误消息;
    • crit:严重错误消息;

    六、虚拟站点

    在一台服务器上配置多个网站,几种方式:

    基于IP:不同的IP地址(基本不会用这种方式)

    基于端口:相同IP,不同的端口号

    基于域名:相同的IP,相同的端口,不同的域名

    基于域名就是将上图中,listen后面都改为80,server_name后面改为对应的域名,并在本地hosts文件中添加DNS解析,如

    192.168.1.7  www.pm.com bbs.pm.com blog.pm.com

    注:不同的站点请设置独立日志,混在一起无法区分。即在各自的server区块内设置access_log

    七、Location

    location用于控制网站路径。

    语法规则:location [=|~|~*|^~] /uri/ { … }

     匹配符  匹配规则        优先级

    =      精确匹配        1

         没有匹配符的精确匹配   2

    ^~    以某个字符串开头     3

    ~      区分大小写的正则匹配   4

    ~*    不区分大小写的正则匹配     5

    !~    区分大小写的非正则匹配     6

    !~*     不区分大小写的非正则匹配  7

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

    location = /abc {

        ……   

    那么,如下是对的:

    http://baidu.com/abc

    http://baidu.com/abc?p1

    如下是错的:

    http://baidu.com/abc/

    http://baidu.com/abcde

    location ~ .avi$ {

      deny all;

    }

    表示凡是以  .avi  结尾的路径都不允许访问。

  • 相关阅读:
    LaTeX中表格多行显示的最简单设置方法
    获取Google音乐的具体信息(方便对Google音乐批量下载)
    移动硬盘提示格式化解决的方法,未正确删除导致不能读取文件提示格式化解决方式
    Android Service 服务(一)—— Service
    华为C8816电信版ROOT过程
    Linux crontab 命令格式与具体样例
    Python用subprocess的Popen来调用系统命令
    我的EJB学习历程
    接口和逻辑--多进程或单一进程
    uva 11354
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/13129395.html
Copyright © 2011-2022 走看看