Nginx

Nginx

Nginx(wngine X)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器

Nginx的程序架构:

        master/worker
            一个master进程:
                负载加载和分析配置文件、管理worker进程、平滑升级
            一个或多个worker进程
                处理并响应用户请求

特性:异步、事件驱动和非阻塞
并发请求处理:通过epoll/select
文件IO:高级IO sendfile,异步,mmap

nginx的三大功能:

        http {}:web服务器(类似于httpd,静态)、http reverse proxy(类似于httpd,动态)
        mail {}:反代IMAP4/POP3/SMTP
        stream{}: TCP/UDP reverse proxy 伪四层调度

nginx模块:高度模块化,但其模块早期不支持DSO机制;近期版本支持动态装载和卸载;

模块分类:

    核心模块:core module
    标准模块:
        HTTP modules:
            Standard HTTP modules
            Optional HTTP modules
        Mail modules
        Stream modules:传输层代理
        

程序环境:

    配置文件的组成部分:
        主配置文件:nginx.conf
            include conf.d/*.conf
            fastcgi, uwsgi,scgi等协议相关的配置文件
            mime.types:支持的mime类型
            主程序文件:/usr/sbin/nginx
            Unit File:nginx.service

配置:

    主配置文件的配置指令:
        directive value [value2 ...];
        注意:
        (1) 指令必须以分号结尾;
        (2) 支持使用配置变量;
        内建变量:由Nginx模块引入,可直接引用;
        自定义变量:由用户使用set命令定义;
        set variable_name value;
        引用变量:$variable_name

    
    主配置文件结构:
        main block:主配置段,也即全局配置段;
            event {
                    ...
            }:事件驱动相关的配置;
            http {
                    ...
            }:http/https 协议相关的配置段;
            mail {
                    ...
            }
            stream {
                    ...
            }
            
    http协议相关的配置结构
        http {
                ...
                ...:各server的公共配置
                server {
                    ...
                }:每个server用于定义一个虚拟主机;
                server {
                    ...
                    listen 
                    server_name
                    root
                    alias
                    location [OPERATOR] URL {
                        ...
                        if CONDITION {
                            ...
                        }
                    }
                }
            }

配置指令:
main配置段常见的配置指令:

分类:
    正常运行必备的配置
    优化性能相关的配置
    用于调试及定位问题相关的配置
    事件驱动相关的配置
                
正常运行必备的配置:
1、user
Syntax: user user [group];
Default:    user nobody nobody;
Context:    main
                    
Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.
                    
2、pid /PATH/TO/PID_FILE;
指定存储nginx主进程进程号码的文件路径;
                    
3、include file | mask;
指明包含进来的其它配置文件片断;
                    
4、load_module file;   新版nginx才支持
指明要装载的动态模块;
                    
性能优化相关的配置:
1、worker_processes number | auto;
worker进程的数量;通常应该等于小于当前主机的cpu的物理核心数;
auto:当前主机物理CPU核心数;
                    
2、worker_cpu_affinity cpumask ...;
worker_cpu_affinity auto [cpumask];
                    
nginx进程的CPU亲缘性,限制绑定一个进程只运行在一个CPU上,绑了之后若是没做隔离这个CPU还可以运行其他的进程,但是此nginx进程只能运行在这一CPU;
                    
CPU MASK:位图掩码
00000000:
0000 0001:0号CPU
0000 0010:1号CPU
0000 0100:2号CPU
... ...
                        
0000 0011:0和1号CPU;
3、worker_priority number;
指定worker进程的nice值,设定worker进程优先级;[-20,20]数字越小,优先级越高
                    
4、worker_rlimit_nofile number;
worker进程所能够打开的文件数量上限;
                    
调试、定位问题:
1、daemon on|off;    
    是否以守护进程方式运行Nignx;centos6为on,使用脚本upstart启动服务进程,要求进程以守护进程运行,否则将占据终端,终端一关闭进程也终止,centos7为off,服务的启动和终止靠systemed来管理,要求进程运行在前台,否则systemed无法管理

2、master_process on|off;
是否以master/worker模型运行nginx;默认为on;
若为off表示至运行一个进程,即接受请求又处理请求,单进程结构
                    
3、error_log file [level];
                    
事件驱动相关的配置:
events {
    ...
}
                
1、worker_connections number;
每个worker进程所能够打开的最大并发连接数数量;
                    
worker_processes * worker_connections
                    
2、use method;
指明并发连接请求的处理方法,默认为epoll(事件驱动);
                        
    use epoll;
                        
3、accept_mutex on | off;
处理新的连接请求的方法;on意味着由各worker轮流处理新请求,Off意味着每个新请求的到达都会通知所有的worker进程;

你可能感兴趣的:(Nginx)