Nginx--配置文件解析

配置文件主要格式

main,event,http

worker_processes  3;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    upstream {
        .,..
    }

    server {
        listen IP:PORT;
        # 虚拟主机
        location /URL {
            if ...{
                ...
            }
            root "/path/to/somewhere";
            ...
        }
    }
    server {
        ,,.
    }
}

正常运行的必备配置:

1、user USERNAME [GROUPNAME];
    指定运行worker进程的用户 和组,例如:
    user nginx nginx;s

2、pid /path/to/pid_file;
    指定nginx的pid文件;

3、worker_rlimit_nofile #;
    指定一个worker进程所能够打开的最大文件句柄数;

4、worker_rlimit_sigpending #;
    指定每个用户能够发往worker的信号的数量;

优化性能相关的配置:

1、worker_processes #:
    worker线程的个数;通常应该为物理CPU核心个数减1;

2、worker_cpu_affinity cpumask ...;
    绑定worker进程至指定的CPU上;
        CPUMASK
            0001
            0010
            0100
            1000 
        例如:
            worker_cpu_affinity 00000001 00000010 00000100;

3、timer_resolution t;
    gettimeofday(); 

4、worker_priority nice;
    -20, 19

事件相关的配置:

1、accept_mutex [on|off]
    内部调用用户 请求至各worker时用的负载均衡锁;打开时表示能让多个worker轮流地、序列化地与响应新请求;

2、lock_file /path/to/lock_file; 

3、accept_mutex_delay #ms;

4、use [epoll|rgsig|select|poll];
    定义使用的事件模型;建议让Nginx自动选择;

5、worker_connections #;
    每个worker进程所能够响应的最大并发请求数;

虚拟主机相关的配置:

1、server {}
    定义一个虚拟主机;

2、listen
    监听的端口
    完整格式 :listen address[:port] [default_server] [ssl] [spdy] [proxy_protocol] [setfib=number] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [accept_filter=filter] [deferred] [bind] [ipv6only=on|off] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

    listen address[:port] [default_server] ssl 

    backlog=number: 指明TCP协议backlog队列的大小。默认为-1,表示不设置;
    rcvbuf=size:设定监听句柄的SO_RCVBUF参数;

    例如:
        listen 172.16.100.8:8080

3、server_name name [...];
    后可跟多个主机名;名称还可以使用通配符和正则表达式(~);

    (1) 先做精确匹配;www.magedu.com: 
    (2) 左侧通配符匹配,例如:*.magedu.com; 
    (3) 右侧通配符匹配,例如:www.*;
    (4) 正则表达式匹配,例如: ~^.*\.magedu\.com$
    (5) default_server

4、location [=|~|~*|^~] /uri {...}
    location @name
    功能:允许根据用户请求的URI来匹配定义的各location,匹配到时,此请求将被相应的location块中的配置所处理;

        =: 精确匹配检查;
        ~: 正则表达式模式匹配,区分字符大小写;
        ~*:正则表达式模式 匹配,不区分字符大小写;
        ^~:URI的前半部分匹配,不检查正则表达式;

    匹配优先级:精确匹配(=)、^~、~和~*、由不带符号的URL进行左侧匹配;

5、root
    设置web资源路径映射;用于指明请求的URL所对应的文档的根目录路径;


    `location /images/ {
        root "/web/imgs/";
    }`

6、alias path
    用于location配置段,定义路径别名 

    `location /images/ {
        alias /www/pictures/;
    }`

    注意:root表示指明路径为对应location的“ /” URL;alias表示路径映射,即location中的URL是相对于alias所指明的路径而言;

7、index file
    默认主页面
        index index.html; 

8、error_page code [...] [=code] URI | @name
    根据http状态码重定向错误页面
    error_page  404   /404.html

    =[code]: 以指定的响应码进行响应;省略code表示以新资源的响应码为响应码;

9、try_files
    try_files path1[,path2,...] URI 

10、基于IP的访问控制
    allow IP/Network;
    deny IP/Network;

11、基于用户的访问控制
    basic,digest
    auth_basic "";
        auth_basic_user_file "/PATH/TO/PASSWDORD_FILE"
    账号密码文件建议使用htpasswd来创建

12、https服务
    生成私钥,生成证书签署请求,并获得证书。

13、stub_status {on|off};
    仅能用于location上下文;

    location /status {
        stub_status on;
        allow 172.16.0.0/16;
        deny all;
    } 

    结果示例:

    Active connections: 6 #当前所有处于打开状态的链接数;
    server accepts handled requests
    241 241 431
        (1)已经接受过的连接数
        (2)已经处理过的连接数
        (3)已经处理过的请求数:在“保持连接”模式下,请求数量可能会多于连接数量。
    Reading:0 Writing:1 Waiting:5
        Reading:正处于接受请求状态的连接数
        Writing:请求已经接收成功,正处于处理请求或发送响应的过程中的连接数
        Waiting:保持连接模式,且处于活动状态的连接数。

14、rewrite regex replacement flag;
    例如:
        rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
        http://www.magedu.com/images/a/b/c/1.jpg --> /imgs/a/b/c/1.jpg

    flag:
        last:
        此rewrite规则重写完成后,不再被后面其它的rewrite规则进行处理:而是由User
        Agent重新对重写后的URL再一次发起请求,并从头开始执行类似的过程。
        break: 一旦被此rewrite规则重写完成后,由User
        Agent对新的URL重新发起请求,且不再会被当前location内的任何rewrite规则所检查。
        redirect:以302响应码(临时重定向)返回新的URL;
        permanent 以301响应码(永久重定向)返回新的URL;

15、if
    语法: if (condition) {...}
    应用环境:server,location
    condition:

    (1) 变量名:
        变量值为空串,或者以“0”开始,则为false;其他均为true
    (2) 以变量为操作数构成的比较表达式可使用=,!=类似的比较操作符进行测试
    (3) 正则表达式的模式匹配操作
    (4) 测试路径为文件可能性:-f !-f
    (5) 测试指定路径为目录的可能性:-d !-d
    (6) 测试文件的存在性:-e, !-e
    (7) 检查文件是否有执行权限:-x , !-x
        例如:
        if($http_user_agent ~* MSIE){
            rewrite ^(.*)$ /msie/$1 break; 判断是手机还是电脑用户
        }

16、防盗链

    location ~* \.(jpg|gif|jpeg|png){
        valid_referer none blockd www.magedu.com;
        if($invalid_referer){
            rewrite ^/ http://www.magedu.com/403.html;
        }
    }

17、定制访问日志

    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 logs/access.log main;

注意此处可用变量为nginx各模块内建变量。  

网络连接相关的配置:

1、keepalive_timeout time;
    保持连接的超时时长,默认为75s;

2、keepalive_requests #;
    在一次保持连接上允许承载最大资源请求数;

3、keepalive_disable [msie6|safari|none]
    为指定类型的浏览器禁用长连接;

4、tcp_nodelay on|off
    对长连接是否使用TCP_NODELAY选项;

5、client_header_timeout time;
    读取http请求报文首部的超时时长;

6、client_body_timeout time;
    读取http请求报文body部分的超时时长;

7、send_timeout time;
    发送响应报文的超时时长;

对客户端请求进行限制:

1、limit_except METHOD {...}
    指定对范围之外的其它方法的访问控制;

    limit_except GET {
        allow 172.16.0.0/16;
        deny all;
    }

2、client_body_max_size SIZE;
    限制请求报文中body部分的上限;通过检测请求报文首部中的"Content_Length"来判定;

3、limit_rate speed; 
    限制客户端每秒种传输的字节数,默认为0,表示无限制;

对内存或磁盘资源进行分配
        1、client_body_in_file_only on|clean|off;
            请求报文的body部分是否可暂存于磁盘;on表示允许,并且即使请求结束,也不会删除暂存的内容;clean表示会删除;off不允许暂存; 

        2、client_body_in_single_buffer on|off 

        3、client_body_buffer_size size;

        4、client_body_temp_path DIR [level1 [level2 [level3 [level4]]]]

            例如:client_body_temp_path /var/tmp/nginx/client  1 2

        5、client_header_buffer_size size:

    MIME类型相关的配置:

        1、types {}
            定义MIME types至文件的扩展名;
                types {
                    text/html .html;
                    image/jpeg  .jpg;
                }

        2、default_type MIME-TYPE;

    文件操作优化相关的配置:
        1、sendfile on|off; 

        2、aio on|off;

        3、directio size|off;
            是否使用O_DIRECT选项去请求读取文件;与sendfile功能互斥;

        4、open_file_cache max=N[inactive=time] | off;
            nginx可以缓存以下三种信息:
                (1) 文件句柄、文件大小和最近一次修改时间;
                (2) 打开目录的目录结构;
                (3) 没有找到的或者没有权限操作的文件的相关信息;

            max=N表示可缓存的最大条目上限;一旦到达上限,则会使用LRU从缓存中删除最近最少使用的条目;

            inactive=time: 在inactive指定的时长内没有被访问过的缓存条目就会淘汰;

        5、open_file_cache_errors on|off;
            是否缓存在文件缓存中缓存打开文件时出现找不到路径,没有权限等的错误信息;

        6、open_file_cache_min_uses time;
            每隔多久检查一次缓存中缓存条目的有效性;默认60s;

    重点关注:server{}, location{}, listen, server_name, root, alias, keepalive_timeout, keepalive_requests, error_page
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值