#使用的用户和组
user  www www;
#指定工作衍生进程数(一般等于cpu的总核数或总核数的两倍,例如两个四核cpu,则总核数为8)
worker_processes 4;
#指定错误日志存放的路径,错误日志记录级别可选项为:[debug|info|notice|warn|error|crit]
error_log  /usr/local/nginx/logs/nginx_error.log  crit;
#指定pid存放的路径
pid        /usr/local/nginx/logs/nginx.pid;
#指定进程可以打开的最大描述符:数目
#工作模式与连接数上限
#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配亲求并不是那么均匀,所以最好与ulimit -n的值保持一致。
#现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应填写65535.这是因为nginx调度时分配请求道进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
worker_rlimit_nofile 65535;

events
{
#使用的网络I/O模型,Linux系统推荐采用epoll模型,FreeBSD系统推荐采用kqueue模型
    use epoll;
    multi_accept on;
#单个进程最大连接数(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行,每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为
    worker_connections 65535;
}

http
{
#文件扩展名与文件类型映射表
    include       mime.types;
#默认文件类型
    default_type  application/octet-stream;
#设置使用的字符集,如果一个网站有多种字符集,请不要随便设置,应让程序员在HTML代码中通过Meta标签设置(默认编码)
    #charset  utf-8;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 32k;
#客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。
#分页大小可以用命令getconf PAGESIZE取得。
#但也有client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。
    client_body_buffer_size  512k;
#客户请求头缓存大小.nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。
    large_client_header_buffers 4 32k;
#设置客户端能够上传的文件大小(设定通过nginx上传文件的大小)
    client_max_body_size 300m;

#开启高效文件传输模式,sendfile指令nginx是否调用sendfile函数来输出文件,对于普通应用设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime.
    sendfile on;
#此选项允许或静止使用socke的TCP——CORK的选项,此选项仅在使用sendfile的时候使用
    tcp_nopush     on;
    tcp_nodelay on;
    server_tokens off;

    keepalive_timeout 60; #keepalive超时时间,单位为秒。
    client_header_timeout 15;
    client_body_timeout 15;
    send_timeout 15;

#后端服务器连接的超时时间_发起握手到等候响应超时时间
#nginx跟后端服务器连接超时时间(代理连接超时)
    proxy_connect_timeout    180;
#连接成功后,后端服务器响应时间(代理接收超时)
#连接成功_等候后端服务器响应时间——其实已经进入后端的配对之中等候处理(也可以说是后端服务器处理请求的时间)
    proxy_read_timeout       180;
#后端服务器数据回传时间(代理发送超时)
#后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
    proxy_send_timeout       180;
#设置代理服务器(nginx)保存用户头信息的缓存区大小
#设置从被代理服务器读取的第一部分应答的缓冲区大小通常情况下这部分应答中包含
#一个小的应答头,默认情况下这个值得大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小
    proxy_buffer_size        16k;
#proxy_buffers缓冲区,网页平均在32k以下的设置
#设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8k
    proxy_buffers            4 64k;
#高负荷下缓冲大小(proxy_buffers*2)
    proxy_busy_buffers_size  128k;
#设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
#设定缓存文件夹大小,大于这个值,将从upstream服务器传
    proxy_temp_file_write_size 128k;

#gzip模块设置
    gzip on;        #开启gzip压缩输出
    gzip_min_length  1k; #最小压缩文件大小
    gzip_buffers   4 32k; #压缩缓存区
    gzip_http_version 1.1; #压缩版本(默认1.1,前段如果是squid2.5请使用1.0)
    gzip_comp_level 6; #压缩等级
    # gzip_types   text/plain application/x-javascript text/css application/xml;
    gzip_types     text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml; #压缩类型,默认就已经包含textml,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn.
    gzip_disable    "MSIE [1-6]\.";
    gzip_vary on;

    # waf
    #lua_package_path "/usr/local/nginx/conf/waf/?.lua";
    #lua_shared_dict limit 10m;
    #init_by_lua_file  /usr/local/nginx/conf/waf/init.lua;
    #access_by_lua_file /usr/local/nginx/conf/waf/waf.lua;

    # cache
#proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
    proxy_temp_path /data/proxy_cache/proxy_temp_dir;
#设置内存缓存空间大小为500MB,7天没有被访问的内容自动清除,硬盘缓存空间大小为30GB
    proxy_cache_path /data/proxy_cache/qmcaifu.com/www levels=1:2 keys_zone=www:500m inactive=7d max_size=30g;
    proxy_cache_path /data/proxy_cache/qmcaifu.com/m levels=1:2 keys_zone=m:500m inactive=7d max_size=30g;

#日志格式的设置
$remote_addr与#$与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local:用来记录访问时间与时区
$request:用来记录请求的url与http协议;
$body_bytes_sent:记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
    log_format qmcaifu.com '$remote_addr - $remote_user [$time_local] "$request" '
                           '$status $body_bytes_sent "$http_referer" '
                           '"$http_user_agent" "$http_x_forwarded_for" '
                           '"$upstream_cache_status" $request_time $upstream_addr $http_host $upstream_response_time';

#负载均衡配置
    upstream backend_www {
#upstream的负载均衡,weight是权重,可以根据机器配置定义权重,weigth参数表示权值,权值越高被分配到的几率越大。
        server 10.161.158.176:80;
        check interval=3000 rise=2 fall=3 timeout=5000;
    }

    include vhost/*.conf;
}