设为首页 收藏本站
查看: 1296|回复: 0

[经验分享] nginx主配置文件详解及优化

[复制链接]

尚未签到

发表于 2018-11-10 11:40:33 | 显示全部楼层 |阅读模式
#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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-633200-1-1.html 上篇帖子: ###centos 7.4 安装nginx-1.10.3### 下篇帖子: Apache 与 Nginx 比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表