主配置文件(nginx.conf):
user nginx nginx; #运行用户
worker_processes 8; #启动进程数,一般等于CPU的总核数或两倍,太多会占用CPU增高。
error_log /tol/app/nginx/logs/nginx_error.log crit; #定义错误日志文件及级别,有 [debug|info|notice|warn|error|crit]
pid /tol/app/nginx/logs/nginx.pid; #定义PID文件
worker_rlimit_nofile 51200; #和系统的单进程打开文件数一致,使用ulimit -SHn 65534 设置
events{
use epoll; #工作模式,有 [kqueue|rtsig|epoll|/dev/poll|select|poll]
worker_connections 51200; #单进程最大连接数,程序最大连接数=worker_connections*worker_processes
}
http{
include mime.types; #文件扩展名与文件类型映射表
default_type application/octet-stream; #设置默认类型是二进制流,当类型未定义时使用二进制流的方式。比如未加装PHP时,是不予解析,用浏览器访问则出现下载窗口
server_names_hash_bucket_size 128; #服务器名字的hash表大小,不能带单位
client_header_buffer_size 128k; #客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小
large_client_header_buffers 4 128k; #客户请求头缓冲大小,4为个数,128k为大小,申请4个128k。nginx默认会用client_header_buffer_size这个buffer来读取header值.
如果header过大,它会使用large_client_header_buffers来读取.
如果设置过小HTTP头/Cookie过大 会报400 错误nginx 400 bad request.
如果超过buffer,就会报HTTP 414错误(URI Too Long).
nginx接受最长的HTTP头部大小必须比其中一个buffer大,否则就会报400的HTTP错误(Bad Request)。
client_max_body_size 8m; #允许客户端请求的最大单个文件字节数(nginx上传文件的大小),若超出此值,报413 Request Entity Too Large
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户,如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误
sendfile on; #打开系统函数sendfile()支持,开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
注意:如果图片显示不正常把这个改成off。
tcp_nopush on; #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用。参考:http://blog.csdn.net/zmj_88888888/article/details/9169227
也就是说tcp_nopush on 会设置调用tcp_cork方法。
这个也是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞
keepalive_timeout 60; #长连接超时时间,单位是秒
tcp_nodelay on; #为了发送小数据,比如10B以下的数据,会封装一个带有40B的IP包。如果每次都将这些小数据封装成IP包,很容易造成网络拥塞,所以就可以设置是将多个小数据封装成一个包(tcp_nodelay off)还是封装这些小数据成一个包(tcp_nodelay on)。tcp_nodelay和tcp_nopush是互斥的。不过如果你同时设置了两个值的话,将会在第一个buf发送的时候,强制push数据,而第二个buf时,将会调用tcp_cork来打开nagle算法,也就是后面的都会应用tcp_nopush.
参考:http://www.pagefault.info/?p=228
#以上四项可以提高文件传输性能
server_tokens off; #关闭报错时的Nginx版本显示
gzip on; #开启gzip压缩输出
gzip_min_length 1k; #从Content-Length中数值获取验证,小于1K会越压越大
gzip_buffers 4 16k; #以16K为单位4倍的申请内存做压缩结果流缓存,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。
gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
gzip_comp_level 2; #压缩比率1-9,1压缩比最小处理速度最快,9压缩比最大但处理最慢且耗CPU
gzip_types text/plain application/x-javascript text/css application/xml; #压缩类型,无论是否指定text/html总是会压缩
gzip_vary on; #此选项可让前端的缓存服务,如squid缓存经过nginx压缩的数据
#limit_zone connlimit $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用,定义名为connlimit的并发连接数限制空间,存储10M的带有二进制IP的会话信息,每个会话信息是32bytes,10M应该可以记录320000个会话。配合limit_conn 使用。
log_format access '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' ' "$http_user_agent" $http_x_forwarded_for';
#$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_s ent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从那个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址;
access_log off; #关闭访问日志
include /tol/app/nginx/conf/vhost/*.conf; #加载其他的配置文件
}
虚拟主机配置文件:
upstream zhuanti { #设定负载均衡的服务器列表,名称为zhuanti
server 127.0.0.1:8040;
}
server {
listen 80;
server_name zhuanti.test.com;
root /tol/htdocs/zhuanti/ROOT;
index index.html index.jsp index.htm;
#limit_conn connlimit 20; #限制一个IP只能最多只能发起20个连接,超过报 503 Service unavailable,与主配置文件里配置的名称对应。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
expires 1h; #缓存到客户端的浏览器一个小时
}
location / {
#autoindex on; 开启自动索引功能,一般用于可以下载文件的服务器
#autoindex_exact_size on|off; 设定索引时文件大小的单位,默认为on,单位是bytes,设为off时单位(B、KB、MB、GB)
#autoindex_localtime on|off; 开启以本地时间来显示文件时间的功能
if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|bingbot|360Spider") { #$http_user_agent 匹配客户端agent信息
proxy_pass http://ask2;
}
proxy_pass http://zhuanti/;
proxy_redirect off;
#proxy_next_upstream http_502 http_504 error timeout invalid_header; #如果后端服务器返回502、504、超时等错误自动将请求转发到upstream负载均衡池中的另一台服务器。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
#以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上
client_max_body_size 50m;
client_body_buffer_size 128k;
proxy_connect_timeout 120; #nginx跟后端服务器连接超时时间_发起握手等候响应超时时间
proxy_send_timeout 120; #后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout 120; #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长
}
access_log /tol/app/nginx/logs/zhuanti.log access;
location /nginxstatus {
allow 127.0.0.1;
deny all;
stub_status on;
access_log off;
}
}