首页 > 其他 > 详细

Nginx-安装依赖及配置详解

时间:2015-05-14 16:24:33      阅读:316      评论:0      收藏:0      [点我收藏+]

依赖

  在安装Nginx之前, 需确保系统已经安装了gcc、 openssl-devel、 pcre-devel和zlib-devel软件库

配置

  Nginx的配置文件nginx.conf位于其安装目录的conf目录下

  Nginx.conf由多个块组成, main section、events section、http section、sever section、location section、upstream section, 最外面的块是main, main包含events和http, http包含upstream和多个server, server又包含多个location:技术分享

  main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)

    main块设置的指令将影响其他所有设置

    server块的指令主要用于指定主机和端口

    upstream指令主要用于负载均衡,设置一系列的后端服务器

    location块用于匹配网页位置

  这四者之间的关系式:server继承main, location继承server, upstream既不会继承其他设置也不会被继承
  在这四个部分当中, 每个部分都包含若干指令, 这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令, 同时每个部分还可以使用其他HTTP模块指令, 例如Http SSL模块、HttpGzip Static模块和Http Addition模块等

 

  main module: 主要控制子进程的所属用户/用户组、派生子进程数、错误日志位置/级别、pid位置、子进程优先级、进程对应cpu、进程能够打开的文件描述符数目等

#user是个主模块指令, 指定Nginx Worker进程运行用户以及用户组, 默认由nobody账号运行
user  nobody nobody;

#worker_processes是个主模块指令, 指定了Nginx要开启的进程数, 每个Nginx进程平均耗费10M~12M内存, 建议指定和CPU的数量一致即可
worker_processes  2;

#error_log是个主模块指令, 用来定义全局错误日志文件, 日志输出级别有debug、info、notice、warn、error、crit可供选择, 其中, debug输出日志最为最详细, 而crit输出日志最少
error_log  logs/error.log  notice;

#pid是个主模块指令, 用来指定进程pid的存储文件位置(kill -9 `cat /usr/local/nginx/logs/nginx.pid`)
pid        logs/nginx.pid;

#worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用
#这个指令是指当一个nginx进程打开的最多文件描述符数目, 理论值应该是最多打开文  件数(ulimit -n)与nginx进程数相除
#但是nginx分配请求并不是那么均匀, 所以最好与ulimit -n 的值保持一致
#现在在linux 2.6内核下开启文件打开数为65535, worker_rlimit_nofile就相应应该填写65535
这是因为nginx调度时分配请求到进程并不是那么的均衡, 所以假如填写10240, 总并发量达到3-4万时就有进程可能超过10240了, 这时会返回502错误
worker_rlimit_nofile 65535;

  events module: 设定Nginx的工作模式(Nginx处理连接的方式)及连接数上限

events {
    #使用网络的I/O模型
    #补充说明:
    #与apache相似, nginx针对不同的操作系统, 有不同的事件模型
    #A)标准事件模型
    #Select、poll属于标准事件模型, 如果当前系统不存在更有效的方法, nginx会选择select或poll, 使用网络IO模型
    #B)高效事件模型
    #Kqueue: 使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃
    #Epoll: 使用于Linux内核2.6版本及以后的系统
    #/dev/poll: 使用于Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+
    #Eventport: 使用于Solaris 10. 为了防止出现内核崩溃的问题, 有必要安装安全补丁
#Linux下效率最高的是epoll模型 use epoll; #每个进程允许的最多连接数, 根据硬件调整, 和前面工作进程配合起来用, 尽量大, 但是别把cpu跑到100%就行 #理论上每台nginx服务器的 最大连接数
= worker_processes*worker_connections #worker_connections 值的设置跟物理内存大小有关 #因为并发受IO约束, 最大连接数的值须小于系统可以打开的最大文件数 #而系统可以打开的最大文件数和内存大小成正比, 一般1GB内存的机器上可以打开的文件数大约是10万左右 #我们来看看360M内存的VPS可以打开的文件句柄数是多少: #$ cat /proc/sys/fs/file-max #输出 34336 #32000 < 34336, 即并发连接总数小于系统可以打开的文件句柄总数, 这样就在操作系统可以承受的范围之内 #所以, worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置 #使得并发总数小于操作系统可以打开的最大文件数目 #其实质也就是根据主机的物理CPU和内存进行配置 #当然, 理论上的并发总数可能会和实际有所偏差, 因为主机还有其他的工作进程需要消耗系统资源 #ulimit -SHn 65535 #进程的最大连接数受Linux系统进程的最大打开文件数限制, 在执行操作系统命令`ulimit -n 65536`后worker_connections的设置才能生效
   worker_connections
204800; #长连接过期时间 keepalive_timeout 60; #客户端请求头部的缓冲区大小, 这个可以根据你的系统分页大小来设置 #一般一个请求头的大小不会超过1k, 不过由于一般系统分页都要大于1k, 所以这里设置为分页大小 #分页大小可以用命令 ·getconf PAGESIZE· 取得 #但也有client_header_buffer_size超过4k的情况, 但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数 client_header_buffer_size 4k; #这个将为打开文件指定缓存, 默认是没有启用的, max指定缓存数量, 建议和打开文件数一致 #inactive是指经过多长时间文件没被请求后删除缓存 open_file_cache max=65535 inactive=60s; #这个是指多长时间检查一次缓存的有效信息 open_file_cache_valid 80s; #open_file_cache指令中的inactive参数时间内文件的最少使用次数, 如果超过这个数字, 文件描述符一直是在缓存中打开的, 如上例, 如果有一个文件在inactive时间内一次没被使用, 它将被移除 open_file_cache_min_uses 1; }

  http module: 配置http服务器相关属性(可以利用它的反向代理功能提供负载均衡支持, 以及正向代理的X墙)

http {
    #include是个主模块指令, 实现对配置文件所包含的文件的设定, 可以减少主配置文件的复杂度
    #类似于Apache中的include方法
    include mime.types;
    
    #属于HTTP核心模块指令, 这里设定默认类型为二进制流, 也就是当文件类型未定义时使用这种方式
    #例如在没有配置PHP环境时, Nginx是不予解析的, 此时, 用浏览器访问PHP文件就会出现下载窗口
    default_type application/octet-stream;
    
    #log_format是Nginx的HttpLog模块指令, 用于指定Nginx日志的输出格式。main为此日志输出格式的名称, 可以在下面的access_log指令中引用
    #$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地址和原来客户端的请求的服务器地址
    log_format main $host $status [$time_local] $remote_addr [$time_local] $request_uri 
        "$http_referer" "$http_user_agent" "$http_x_forwarded_for" 
        $bytes_sent $request_time $sent_http_x_cache_hit;
        log_format log404 $status [$time_local] $remote_addr $host$request_uri $sent_http_location;
    
    #设置了log_format肯定要设置日志存放路径
    access_log /usr/local/nginx/logs/access_log main; 
        
    #用来设置允许客户端请求的最大的单个文件字节数
    client_max_body_size 20m;
    
    #用来指定客户端请求中较大的消息头的缓存最大数量和大小,  “4”为个数, “128K”为大小, 最大缓存量为4个128K
    large_client_header_buffers 32K;
    
    #用于开启高效文件传输模式
    sendfile on;
    
    #将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
    tcp_nopush on;
    tcp_nodelay on;
    
    #设置客户端连接保持活动的超时时间, 在超过这个时间之后, 服务器会关闭该连接
    keepalive_timeout 60;
    
    #指定响应客户端的超时时间, 这个超时仅限于两个连接活动之间的时间, 如果超过这个时间, 客户端没有任何活动, Nginx将会关闭连接
    send_timeout 10;
    
    #gzip用于设置开启或者关闭gzip模块, “gzip on”表示开启GZIP压缩, 实时压缩输出数据流
    gzip  on;
    
    #gzip_min_length设置允许压缩的页面最小字节数, 页面字节数从header头的Content-Length中获取
    #默认值是0, 即不管页面多大都进行压缩, 建议设置成大于1K的字节数, 小于1K可能会越压越大
    gzip_min_length  1k;
    
    #gzip_buffers表示申请4个单位为16K的内存作为压缩结果流缓存, 默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
    gzip_buffers     4  16k;
    
    #gzip_http_version用于设置识别HTTP协议版本, 默认是1.1, 目前大部分浏览器已经支持GZIP解压, 使用默认即可
    gzip_http_version  1.1;
    
    #gzip_comp_level用来指定GZIP压缩比
    #1 压缩比最小, 处理速度最快
    #9 压缩比最大, 传输速度快, 但处理最慢, 也比较消耗cpu资源
    gzip_comp_level  2;
    
    #gzip_types用来指定压缩的类型, 无论是否指定, “text/html”类型总是会被压缩的
    gzip_types  text/plain application/x-javascript text/css application/xml;
    
    #gzip_vary选项可以让前端的缓存服务器缓存经过GZIP压缩的页面, 例如用Squid缓存经过Nginx压缩的数据
    gzip_vary  on;
    
    #保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制的
    #参数hash_bucket_size总是等于hash表的大小, 并且是一路处理器缓存大小的倍数
    #在减少了在内存中的存取次数后, 使在处理器中加速查找hash表键值成为可能
    #如果hash_bucket_size等于一路处理器缓存的大小, 那么在查找键的时候, 最坏的情况下在内存中查找的次数为2
    #第一次是确定存储单元的地址, 第二次是在存储单元中查找键值
    #因此, 如果Nginx给出需要增大hash_max_size或hash_bucket_size的提示, 那么首要的是增大前一个参数的大小.
    server_names_hash_bucket_size 128;
    
    #客户端请求头部的缓冲区大小, 这个可以根据你的系统分页大小来设置, 一般一个请求的头部大小不会超过1k
    #不过由于一般系统分页都要大于1k, 所以这里设置为分页大小, 分页大小可以用命令`getconf PAGESIZE`取得
    client_header_buffer_size 4k;
    
    #客户请求头缓冲大小, 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)
    large_client_header_buffers 8 128k;
    
    #使用字段:http, server, location 这个指令指定缓存是否启用,如果启用,将记录文件以下信息:
    #打开的文件描述符,大小信息和修改时间. ·存在的目录信息. ·在搜索文件过程中的错误信息 --没有这个文件,无法正确读取,参考open_file_cache_errors指令选项:
    #·max -指定缓存的最大数目,如果缓存溢出,最长使用过的文件(LRU)将被移除
    #例: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
    open_file_cache max 102400

    #语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.
    open_file_cache_errors on;
    
    #语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location #这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态
    open_file_cache_min_uses on;
    
    #语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息.
    open_file_cache_valid on;
    
    #设定通过nginx上传文件的大小
    client_max_body_size 300m;
    
    #设置客户端请求头读取超时时间, 如果超过这个时间, 客户端还没有发送任何数据
    #Nginx将返回“Request time out(408)”错误;
    client_header_timeout 10;
    
    #设置客户端请求主体读取超时时间, 如果超过这个时间, 客户端还没有发送任何数据
    #Nginx将返回“Request time out(408)”错误, 默认值是60;
    client_body_timeout 10;
}

  

 

  全文参考: http://wiki.nginx.org/NginxChs

Nginx-安装依赖及配置详解

原文:http://www.cnblogs.com/JohnABC/p/4503458.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!