全局区:

user nginx nginx; #nginx的用户,和用户组

worker_processes 1; #工作进程个数等于逻辑cpu个数 cat /proc/cupinfo |grep processor

error_log logs/error.log notice; #错误日志的存放路径,及等级[debug|info|warn|error|crit]

pid  /var/run/nginx.pid;

worker_rlimit_nofile 1024;#ulimit -n ,不能超过最大文件打开数目,


events {
    use epoll;   //使用网络IO模型,Linux系统采用epoll,freebsd采用kqueue
    worker_connections  1024;  //最大连接数,不超过work_rlimit_nofile所设置的值
}


http {
    include       mime.types; #设定mime类型,由mime.types文件定义  

    default_type  application/octet-stream;

 #default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP 环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口。   

    server_names_hash_bucket_size 128;

#不能带单位!配置个主机时必须设置该值,否则无法运行Nginx或测试时不通过,该设置与server_names_hash_max_size 共同控制保存服务器名的HASH表,hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。若hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。若报出hash max size 或 hash bucket size的提示,则我们需要增加server_names_hash_max_size的值。

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


    userid on; 启用版本2的cookie并记录   

    userid_name nsunid;设置cookie的名称   

    userid_expires 365d;设置cookies保存在客户端浏览器的时间365天

    userid_p3p    'policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"'; p3p提供个人隐私保护策略


    server_tokens off; #隐藏nginx的版本   

    keepalive_timeout  65; #连接超时时间


    gzip  on; #打开GZIP压缩,实时压缩输 出数据流

    gzip_min_length 1k; #文件大于1K就进行压缩

    gzip_http_version 1.0;

     #用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,

     所以为了支持前期版本加了此选项,目前此项基本可以忽略

    gzip_comp_level 2;

#一般来说gzip_comp_level的值不会在性能方面有多大的差别,设为为4-5即可。 一味的增加它是没有意义的只是浪费的CPU的周期。

#设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大.等级是1-9


    gzip_vary on;

#和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩

    client_header_buffer_size 4k; 客户端请求头部的缓冲区大小,根据系统内存页大小来设置 getconfig PAGESIZE.

    #一般一个请求头的大小都不会超过1k,由于一般系统分业都要大于4K,所以这里设置为

    分页的大小4k,分页大小可以用getconf PAGESIZE这个命令来获得 

    large_client_header_buffers 4 128k;

     #4为个 数,128k为大 小,默认是4k。申请4个128k。当http 的URI太长或者request header过大时 会报414 Request URI too  large或400  bad request,这是很有可能是cookie中写入的值太大造成的,因为header中的其 他参数的size一般 比较固定,只有cookie可能 被写入较大的数据,这时可以调大上述两个值,相应的浏览器中cookie的字 节数上限会增大。

 
    client_max_body_size 300M; #允许客户端http报文的content-length的最大值为300M

    client_max_buffer_size =8k;可以指定连接请求使用的缓冲区大小,

如果连接请求超过缓冲区指定的值,那么这些请求或部分请求将尝试楔入一个临时文件,

默认值为两个内存页大小,主流内存页大小为4k,2被即8k


    sendfile on; #打开系统sendfile()函数的支持,普通的read(),write()函数读写上太慢,需要切换很多次上下文环境,

    而sendfile()函数是底层的函数,效率高,不用切换很多次上下文环境即用户空间和内核空间

   tcp_nopush      on;

    #on为启用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用,tcp/ip传输的一般情况下是关闭TCP_CORK的

    即接受到应用层的数据包马上传输出去,不等待,而开启TCP_CORK后是等待,等待数据包最大时,一次性传出去,解决网络堵塞问题

   tcp_nodelay     on;  #不需要等待0.2s后才能发送数据包,即立即发送.


proxy_connect_timeout 300;#nginx跟后端服务器连接超时时间(代理连接超时)

proxy_read_timeout 120;#连接成功后,后端服务器响应时间。

proxy_send_timeout 120;#后端服务器数据回传时间


proxy_buffers 8 4k

该指令设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,(数据)会放置到这里. 默认情况下,一个缓冲区的大小等于内存页面大小,可能是4K也可能是8K,这取决于平台,每个请求对应于所有的proxy_buffers,而不是全部proxy_buffer才8个,


proxy_buffer_size 4k

该指令设置缓冲区大小,主要缓冲从后端服务器发来的响应报文的头部信息,每个请求对应一个

默认来说,该缓冲区大小等于指令 proxy_buffers所设置的;但是,你可以把它设置得更小


proxy_buffering on/off 为on,则开启proxy_buffers和proxy_busy_buffers_size,不管proxy_buffering是on还是off,proxy_buffer_size都是开启的,proxy_buffering on表示缓冲区开启,每个请求所获得的响应报文会会先存到nginx的缓冲区中,如果存不下,则写到硬盘上(即文件里),此时buffer一直处于busy直到buffer被写满,或数据接受完了,buffer开始从缓冲区发送数据到客户端.如果为off则不缓冲.只有proxy_buffer_size接受响应头部信息.


proxy_busy_buffers_size 8k;为proxy_buffer_size的2倍


proxy_max_temp_file_size  1024m总的临时文件大小,默认1024M


proxy_temp_file_write_size 128k 设定缓存文件夹大小,大于这个值,将从upstream服务器传送


proxy_temp_path /data/nginx/proxy_temp;设置临时文件路径


proxy_cache_path /data/nginx/proxy_cache levels=2:2 keys_zone=cache_one:1024m max_size=40g inactive=3d

设定缓冲区名称cache_one ,levels=2:2 表示一级目录时2个字符,二级目录时2个字符,内存缓冲空间大小为1024MB,cache_one的硬盘容量为40g,缓存文件3天没被访问就自动被删掉.

proxy_temp_path和proxy_cache_path指定的路径必须在同一分区


proxy_cache_valid 200 302 3d

说明对于状态为200和304的缓存文件的缓存时间是3天,3天后再访问该缓存文件,该文件会过期,从而去上游服务器去找

include /etc/nginx/conf.d/*.conf;

}




location / {

root /usr/local/myinstall/html;

autoindex on; 浏览目录功能打开

autoindex_exact_size off/on; on显示文件的确切大小,off显示文件的大概大小

autoindex_localtime off/on; on显示文件时间为nginx服务器的时间,off显示文件时间为GTM时间

}

location  里:

fastcgi_connect_timeout 300;

#指定连接到后端fastcgi的超时时间

fastcgi_send_timeout 300;

#向FastCGI 传送请求的超时时间,这个值是指已经完成两次握手后向FastCGI 传送请求的超时时间。

fastcgi_read_timeout 300;

#接收FastCGI 应答的超时时间,这个值是指已经完成两次握手后接收FastCGI 应答的超时时间。

fastcgi_buffer_size 256k;

#指定读取FastCGI 应答第一部分需要用多大的缓冲区,一般第一部分应答不会超过1k,由于页面大小为32k,所以这里设置为32k。

fastcgi_buffers 2 256k;

#指定本地需要用多少和多大的缓冲区来缓冲FastCGI 的应答。

#定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求。如果一个PHP脚本所产生的页面大小为256KB,那么会为其分配4个64KB的缓冲区来缓存;如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于硬盘。一般这个值应该为站点中PHP脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“16 16k”、“4 64k”等。

fastcgi_busy_buffers_size 256k;

#这个指令我也不知道是做什么用,只知道默认值是fastcgi_buffer_size的两倍。http://www.linuxidc.com/Linux/2010-08/27874.htm

fastcgi_temp_file_write_size 256k;

#在写入fastcgi_temp_path 时将用多大的数据块,默认值是fastcgi_buffer_size 的两倍。



#fastcgi_cache_path /tmp/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=2m;

#这个指令为FastCGI 缓存指定一个路径,目录结构等级,关键字区域存储时间和非活动删除时间。并指定的缓存名称TEST。

#这里最好是放在server段中来调用。如果在这里调用,会对其它站点产生混乱。

#fastcgi_cache TEST;

#开启FastCGI 缓存。个人感觉开启缓存非常有用,可以有效降低CPU 负载,并且防止502 错误。

#fastcgi_cache_valid 200 302 1h;

#fastcgi_cache_valid 301 1d;

#fastcgi_cache_valid any 1m;

#为指定的应答代码指定缓存时间,如上例中将200,302 应答缓存一小时,301 应答缓存1 天,其他为1 分钟。

#fastcgi_cache_min_uses 2;

#缓存在fastcgi_cache_path 指令inactive 参数值时间内的最少使用次数,如上例,如果在5 分钟内某文件1 次也没有被使用,那么这个文件将被移除。

#设置链接请求几次就被缓存

#fastcgi_cache_use_stale error timeout invalid_header http_500;

#不知道这个参数的作用,猜想应该是让nginx 知道哪些类型的缓存是没用的。

#以上为nginx 中FastCGI 相关参数