全局区:
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 相关参数