#user www www;
#如果服务器是多cpu的话,可以用如下指令指定nginx工作进程的数量,官方配置一般为server的cpu个数(或cpu核心数)的2倍。它能够把工作负载平均分配到多个处理器上,也能减少进程在磁盘I/O阻塞上的延迟时间。
worker_processes 8;
pid logs/nginx.pid;
error_log logs/error.log;
#指定单个worker_process进程能够打开的文件描述符个数,如果并发的请求量过大,单个进程的打开的文件描述符数量大于这个数,就会向客户端返回502错误
worker_rlimit_nofile 10240;
#定义事件机制的指令,使用合适的事件处理机制,从而增加nginx的性能
events {
#linux的内核版本为2.6以上的,故使用epoll事件模型,它比select模型高效很多。主要表现在:
1,每个进程能够打开的fd的个数是没有限制的 2,由于网络延迟等原因,任一时间只有部分的socket是"活跃"的,而select/poll每次调用都会线性扫描全部的集合(轮询方式),导致效率呈现线性下降。但是epoll不存在这个问题,它只会对"活跃"的socket进行操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的,如果fd就绪就会通知进程,增加了效率。于是,只有"活跃"的socket才会主动去调用callback函数,其他idle状态的socket则不会。
use epoll;
#定义每个worker_process工作进程能够处理的连接数
worker_connections 10240;
}
http {
#mime.types文件中定义了web服务器常用的所有MIME类型,也可以通过修改此文件,来自定义类型。MIME TYPE的作用是告诉浏览器所请求的文件媒体类型。
include mime.types;
#此指令用于定义默认的MIME类型,当nginx无法识别文件属于何种MIME类型时,则告诉浏览器此文件类型为“二进制数据类型”
default_type application/octet-stream;
#定义log的格式,可以使用nginx的通用变量和一些只有在写日志时才存在的变量进行定义。根据需要需要定义log的格式,可以从log中获取有用的信息,便于我们分析一些故障和做一些统计工作等。
log_format main '"$time_local","$remote_addr","$http_x_forwarded_for","$http_host","$request","$http_referer","$http_user_agent","$upstream_http_x_s_m","$cookiesize","$http_x_sohupassport_userid","$status","$cookie__smuid","$request_time","$body_bytes_sent","$upstream_addr","$upstream_status","$upstream_response_time","$http_accept","$http_q_ua","m-nginx-94"';
log_format hz_main '"[$time_local]","$remote_addr","$http_x_forwarded_for","$http_x_sohupassport_userid","$request","$request_length","$request_time","$body_bytes_sent","$status","$http_referer","$http_user_agent","$uid","$fr","$upstream_addr","$upstream_status","$upstream_response_time","m-nginx-94"';
##########如下三行的意思为: nginx首先调用tcp_cork,阻塞下层的数据发送,然后调用send_file发送数据,然后当前的请求结束,最终会调用tcp_close或者tcp_shutdown(设置linger_timeout)来关闭连接,而当关闭连接(我们的keepalived设置的为0)的同时,内核会将写buf中缓存的数据发送出去,这样,就不需要我们关闭tcp_cork,因为内核会帮我们做这个,于是减少了一次系统调用。
#启用sendfile()函数。sendfile()是作用于数据拷贝在两个文件描述符之间的操作函数.这个拷贝操作是内核中操作的,所以称为"零拷贝".sendfile函数比起read和write函数高效得多,因为read和write是要把数据拷贝到用户应用层操作.
sendfile on;
#该指令允许或者禁止使用FreeBSD的TCP_NOPUSH,或者是Linux的TCP_CORK套接字,这个仅在sendfile开启的时候才有用。
tcp_nopush on;
#默认情况下数据发送时,内核不会马上发送,会等待较多的字节组成一个数据包,这样能提供IO的发送效率,对于大量数据的传送石非常有益的。但是,如果每次只发送很少字节的程序中,等待时间就会长,由于我们的web服务器一次不会传输大量数据,故禁用内核这个等待功能,会提高nginx传送数据的效率。
tcp_nodelay on;
#设定客户端到服务器端连接的超时时间,对于提供静态内容的网站是非常有用的,但是连接保持不释放也非常消耗nginx服务器的资源。设置为0即表示不启用这个功能,动态网站一般禁用。
keepalive_timeout 0;
#开启gzip压缩功能,对用户请求的页面进行压缩处理,以达到节省网络带宽,提高网站速度的作用。
gzip on;
#允许压缩的页面最小字节数。建议值为大于1024字节,小于1K的压缩可能无效果
gzip_min_length 1000;
#设置系统获取几个单位的缓存用于存储gzip压缩结果数据流。此设置为:按照原始数据大小以16K为单位的4倍大小申请内存空间。如果不设置的话,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩的结果。
gzip_buffers 4 16k;
#指定需要被压缩的文件媒体类型
gzip_types text/* text/css text/vnd.wap.wml application/javascript application/x-javascript
application/xml application/xhtml application/xhtml+xml application/wml application/action;
#设置压缩比,值为1-9,压缩比最大,处理速度会越慢
gzip_comp_level 9;
#nginx做反向代理时启用该选项,表示无论后端服务器的headers头返回什么信息,都无条件启用压缩
gzip_proxied any;
#识别http协议的版本,只有1.1版本的压缩,因为可能早期的浏览器或http客户端可能不支持gzip压缩
gzip_http_version 1.1;
#如果IE1-6的浏览器的gzip压缩,因为他们不支持
gzip_disable "MSIE [1-6].(?!.*SV1)";
#gzip_vary的作用是在http响应中增加一行“Vary: Accept-Encoding”,目的是改变反向代理服务器的缓存策略,反向代理服务器会根据后端服务器是否带Vary头采用不同的缓存策略。
gzip_vary on;
#设置nginx获取几个单位的缓存空间,用于存放要向客户端发送的数据。此设置为:按照原始数据大小以32K为单位的4倍大小申请内存空间。
output_buffers 4 32k;
#当nginx向客户端发送的数据达到1460字节的时候,才向客户端发送数据,提高效率
postpone_output 1460;
#设定服务器名称(即server_name指令所设置)哈希表的框大小,值越大能设置的server_name可以越多。参数哈希框大小总是等于哈希表的大小,即处理器高速缓存区(32)的倍数,这将加速处理器中key的搜索速度,减少内存的存取数。
server_names_hash_bucket_size 128;
#用于设置客户端请求的Header头缓冲区的大小,一般1kb就够用
client_header_buffer_size 32k;
#设置nginx允许接收的客户端请求内容的最大值,及客户端请求Header头信息中设置的Content-Lenth大最大值。如果超出该指令设置的最大值,nginx将返回“Request Entity Too Large”的错误信息(HTTP的413错误码)
client_max_body_size 8m;
#设置客户端请求的Header头缓冲区大小,默认为4K。客户端请求行不能超过设置的第一个数,请求的Header头信息不能大于设置的第二个数,否则会报"Request URI too large"(414)或“Bad request”(400)错误。如果客户端的Cookie信息较大,则需增加缓冲区大小
large_client_header_buffers 4 256k;
#设置nginx读取客户端请求Header头信息的超时时间,如果超过该指令设置的时间,nginx将返回"Requet time out"错误信息(HTTP的408错误码)
client_header_timeout 1m;
#设定nginx读取客户端请求内容的超时时间,如果超过该指令设置的时间,nginx将返回"Request time out"错误信息(HTTP状态码408)
client_body_timeout 1m;
#设置发送给客户端的应答超时时间。指两次tcp握手,还没有转为established状态的时间。如果这个时间,客户端没有响应,Nginx则关闭连接
send_timeout 1m;
#该指令判断nginx是否会拦截HTTP状态码为400及以上的代码应答。on之后,nginx将会拦截error_page指令明确指定的错误状态码,如果来自被代理服务器的应答状态码不匹配一个error_page指令,应答将被正常发送。
proxy_intercept_errors on;
secret /opt/apps/wcms2_0/conf/secret.key;
#包含配置文件,并且支持文件名的匹配,例:"include extra/*.conf"
include extra/upstreamA.conf;
include extra/upstreamOther.conf;
include extra/upstreamTest.conf;
include extra/m.sohu.com.conf;
include extra/ucweb.m.sohu.com.conf;
include extra/a.m.sohu.com.conf;
include extra/b.m.sohu.com.conf;
include server-status.conf;
include extra/uc.m.sohu.com.conf;
include extra/hz.m.sohu.com.conf;
include extra/2012.m.sohu.com.conf;
}
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com