nginx 配置说明
配置文件说明 #定义Nginx运行的用户和用户组 # user nobady nobady; #nginx进程数,建议设置为等于CPU总核心数,默认为1。 worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error.log info; #进程pid文件,指定nginx进程运行文件存放地址 pid /usr/local/nginx/logs/nginx.pid; #指定进程可以打开的最大描述符:数目 #工作模式与连接数上限 #这个指令是指当一个nginx进程打开的最多文件描述符数目,理 论值应该是最多打开文件数 (ulimit -n)与nginx进程数相除,但是nginx分配请求并不 是那么均匀,所以最好与ulimit -n 的值保持一致。 #现在在linux 2.6内核下开启文件打开数为65535, worker_rlimit_nofile就相应应该填写 123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 65535。 30 31 #这是因为nginx调度时分配请求到进程并不是那么的均衡,所以 假如填写10240,总并发量达到3-4 32 33 万时就有进程可能超过10240了,这时会返回502错误。 34 worker_rlimit_nofile 65535; 35 36 events 37 38 { 39 40 #参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll 41 42 ]; epoll模型 43 44 #是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建 议epoll,如果跑在FreeBSD 45 46 上面,就用kqueue模型。 47 48 #补充说明: 49 50 #与apache相类,nginx针对不同的操作系统,有不同的事件模 型 51 52 #A)标准事件模型 53 54 #Select、poll属于标准事件模型,如果当前系统不存在更有效 的方法,nginx会选择select 55 56 或poll 57 58 #B)高效事件模型 59 60 #Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处 61 62 理器的MacOS X系统使用kqueue可能会造成内核崩溃。 63 64 #Epoll:使用于Linux内核2.6版本及以后的系统。 65 66 #/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 67 68 6.5.15+ 和 Tru64 UNIX 5.1A+。 69 70 #Eventport:使用于Solaris 10。 为了防止出现内核崩溃的 问题, 有必要安装安全补丁。 71 72 use epoll; 73 74 #单个进程最大连接数(最大连接数=连接数*进程数) 75 76 #根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把 cpu跑到100%就行。每个进程 77 78 允许的最多连接数,理论上每台nginx服务器的最大连接数为。 79 80 worker_connections 65535; 81 82 #keepalive超时时间,默认是60s,切记这个参数也不能设置过 大!否则会导致许多无效的 83 84 http连接占据着nginx的连接数,终nginx崩溃! 85 86 keepalive_timeout 60; 87 88 #客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小 来设置,一般一个请求头的大 89 90 小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设 置为分页大小。 91 92 #分页大小可以用命令getconf PAGESIZE 取得。 93 94 #[root@web001 ~]# getconf PAGESIZE 95 96 #4096 97 98 #但也有client_header_buffer_size超过4k的情况,但是 99 100 client_header_buffer_size该值必须设置为“系统分页大 小”的整倍数。 101 102 client_header_buffer_size 4k; 103 104 #这个将为打开文件指定缓存,默认是没有启用的,max指定缓存 数量,建议和打开文件数一致, 105 106 inactive是指经过多长时间文件没被请求后删除缓存。 107 108 open_file_cache max=65535 inactive=60s; 109 110 #这个是指多长时间检查一次缓存的有效信息。 111 112 #语法:open_file_cache_valid time 默认 值:open_file_cache_valid 60 使用字 113 114 段:http, server, location 这个指令指定了何时需要检查 open_file_cache中缓存项目的有 115 116 效信息. 117 118 open_file_cache_valid 60s; 119 120 #open_file_cache指令中的inactive参数时间内文件的最少 使用次数,如果超过这个数字, 121 122 文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive时间内一次没被使用,它将 123 124 被移除。 125 126 #语法:open_file_cache_min_uses number 默认 值:open_file_cache_min_uses 1 127 128 使用字段:http, server, location 这个指令指定了在 open_file_cache指令无效的参数中 129 130 一定的时间范围内可以使用的最小文件数,如果使用更大的值,文 件描述符在cache中总是打开状态. 131 132 open_file_cache_min_uses 1; 133 #语法:open_file_cache_errors on | off 默认 值:open_file_cache_errors off 134 135 使用字段:http, server, location 这个指令指定是否在搜 索一个文件是记录cache错误. 136 137 open_file_cache_errors on; 138 139 } 140 141 #设定http服务器,利用它的反向代理功能提供负载均衡支持 142 143 http 144 145 { 146 147 #文件扩展名与文件类型映射表 148 149 include mime.types; 150 151 #默认文件类型 152 153 default_type application/octet-stream; 154 155 #默认编码 156 157 #charset utf-8; 158 159 #服务器名字的hash表大小 160 161 #保存服务器名字的hash表是由指令 server_names_hash_max_size 和 162 163 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大 164 165 小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取 次数后,使在处理器中加速查找 166 167 hash表键值成为可能。如果hash bucket size等于一路处理器 缓存的大小,那么在查找键的时 168 169 候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单 元的地址,第二次是在存储单元中查 170 171 找键 值。因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么 172 173 首要的是增大前一个参数的大小. 174 175 server_names_hash_bucket_size 128; 176 177 #客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小 来设置,一般一个请求的头部 178 179 大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里 设置为分页大小。分页大小可以用命 180 181 令getconf PAGESIZE取得。 182 183 client_header_buffer_size 32k; 184 185 #客户请求头缓冲大小。nginx默认会用 client_header_buffer_size这个buffer来读取 186 187 header值,如果header过大,它会使用 large_client_header_buffers来读取。 188 189 large_client_header_buffers 4 64k; 190 191 #设定通过nginx上传文件的大小 192 193 client_max_body_size 8m; 194 195 #开启高效文件传输模式,sendfile指令指定nginx是否调用 sendfile函数来输出文件,对于 196 197 普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用, 可设置为off,以平衡磁盘与网络 198 199 I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这 个改成off。 200 201 #sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对 202 203 于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负 载应用,可设置为off,以平衡磁盘 204 205 与网络IO处理速度,降低系统uptime。 206 207 sendfile on; 208 209 #开启目录列表访问,合适下载服务器,默认关闭。 210 211 autoindex on; 212 213 #此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在 使用sendfile的时候使用,告 214 215 诉nginx在一个数据包里发送所有头文件,而不一个接一个的发 送。就是说数据包不会马上传送出 216 217 去,等到数据包最大时,一次性的传输出去,这样有助于解决网络 堵塞 218 219 tcp_nopush on; 220 #告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发 送数据时,就应该给应用设置 221 222 这个属性,这样发送一小块数据信息时就不能立即得到返回值 223 224 tcp_nodelay on; 225 226 #长连接超时时间,单位是秒 227 228 keepalive_timeout 120; 229 230 #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高 访问速度。下面参数看字面意 231 232 思都能理解。 233 234 #这个指令为FastCGI缓存指定一个路径,目录结构等级,关键字 区域存储时间和非活动删除时 235 236 间 237 238 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 239 240 keys_zone=TEST:10m inactive=5m; 241 242 #指定连接到后端FastCGI的超时时间 243 244 fastcgi_connect_timeout 300; 245 246 #向FastCGI传送请求的超时时间,这个值是指已经完成两次握手 后向FastCGI传送请求的超时 247 248 时间 249 250 fastcgi_send_timeout 300; 251 252 #接收FastCGI应答的超时时间,这个值是指已经完成两次握手后 接收FastCGI应答的超时时间 253 254 fastcgi_read_timeout 300; 255 256 #指定读取FastCGI应答第一部分 需要用多大的缓冲区,这里可以 设置为fastcgi_buffers指 257 258 令指定的缓冲区大小,上面的指令指定它将使用1个 16k的缓冲区 去读取应答的第一部分,即应答 259 260 头,其实这个应答头一般情况下都很小(不会超过1k),但是你 如果在fastcgi_buffers指令中指 261 262 定了缓冲区的大小,那么它也会分配一个fastcgi_buffers指定 的缓冲区大小去缓存 263 264 fastcgi_buffer_size 64k; 265 266 #指定本地需要用多少和多大的缓冲区来 缓冲FastCGI的应答, 如上所示,如果一个php脚本所 267 268 产生的页面大小为256k,则会为其分配16个16k的缓冲区来缓 存,如果大于256k,增大 于256k的部 269 270 分会缓存到fastcgi_temp指定的路径中, 当然这对服务器负载 来说是不明智的方案,因为内存中处 271 272 理数据速度要快于硬盘,通常这个值 的设置应该选择一个你的站 点中的php脚本所产生的页面大小的 273 274 中间值,比如你的站点大部分脚本所产生的页面大小为 256k就可 以把这个值设置为16 16k,或者4 275 276 64k 或者64 4k,但很显然,后两种并不是好的设置方法,因为 如果产生的页面只有32k,如果用4 277 278 64k它会分配1个64k的缓冲区去缓存,而如果使用64 4k它会分 配8个4k的缓冲区去缓存,而如果使 279 280 用16 16k则它会分配2个16k去缓存页面,这样看起来似乎更加合 理• 281 282 fastcgi_buffers 4 64k; 283 284 #这个指令我也不知道是做什么用,只知道默认值是 fastcgi_buffers的两倍 285 286 fastcgi_busy_buffers_size 128k; 287 288 #在写入fastcgi_temp_path时将用多大的数据块,默认值是 fastcgi_buffers的两倍 289 290 fastcgi_temp_file_write_size 128k; 291 292 #开启FastCGI缓存并且为其制定一个名称。个人感觉开启缓存非 常有用,可以有效降低CPU负 293 294 载,并且防止502错误。但是这个缓存会引起很多问题,因为它缓 存的是动态页面。具体使用还需根据 295 296 自己的需求 297 298 fastcgi_cache TEST 299 300 #为指定的应答代码指定缓存时间,如上例中将200,302应答缓 存一小时,301应答缓存1天, 301 302 其他为1分钟 303 304 fastcgi_cache_valid 200 302 1h; 305 306 fastcgi_cache_valid 301 1d; 307 308 fastcgi_cache_valid any 1m; 309 310 #缓存在fastcgi_cache_path指令inactive参数值时间内的 最少使用次数,如上例,如果在 311 312 5分钟内某文件1次也没有被使用,那么这个文件将被移除 313 314 fastcgi_cache_min_uses 1; 315 316 #gzip模块设置 317 318 #开启压缩 319 320 gzip on; 321 322 # 设置允许压缩的页面最小字节数,页面字节数从header头得 content-length中进行获取。 323 324 默认值是0,不管页面多大都压缩。建议设置成大于2k的字节数, 小于2k可能会越压越大。 325 gzip_min_length 2k; 326 327 # 设置系统获取几个单位的缓存用于存储gzip的压缩结果数据 流。 例如 4 4k 代表以4k为单 328 329 位,按照原始数据大小以4k为单位的4倍申请内存。 4 8k 代表 以8k为单位,按照原始数据大小以8k 330 331 为单位的4倍申请内存。 332 333 # 如果没有设置,默认值是申请跟原始数据相同大小的内存空间 去存储gzip压缩结果。 334 335 gzip_buffers 4 16k; 336 337 #压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间 338 339 gzip_comp_level 5; 340 341 # 默认值: gzip_types text/html (默认不对js/css文件 进行压缩) 342 343 # 压缩类型,匹配MIME类型进行压缩 344 345 # 不能用通配符 text/* 346 347 # (无论是否指定)text/html默认已经压缩 348 349 # 设置哪压缩种文本文件可参考 conf/mime.types 350 351 gzip_types text/plain application/x- 352 353 javascript text/css application/xml; 354 355 # 值为1.0和1.1 代表是否压缩http协议1.0,选择1.0则1.0 和1.1都可以压缩 356 357 gzip_http_version 1.0 358 359 # IE6及以下禁止压缩 360 361 gzip_disable "MSIE [1-6]\."; 362 363 # 默认值:off 364 365 # Nginx作为反向代理的时候启用,开启或者关闭后端服务器返 回的结果,匹配的前提是后端服 366 367 务器必须要返回包含"Via"的 header头。 368 369 # off - 关闭所有的代理结果数据的压缩 370 371 # expired - 启用压缩,如果header头中包含 "Expires" 头信息 372 373 # no-cache - 启用压缩,如果header头中包含 "CacheControl:no-cache" 头信息 374 375 # no-store - 启用压缩,如果header头中包含 "CacheControl:no-store" 头信息 376 377 # private - 启用压缩,如果header头中包含 "CacheControl:private" 头信息 378 379 # no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 380 381 # no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头 信息 382 383 # auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 384 385 # any - 无条件启用压缩 386 387 gzip_proxied expired no-cache no-store private auth; 388 389 # 给CDN和代理服务器使用,针对相同url,可以根据头信息返回 压缩和非压缩副本 390 391 gzip_vary on; 392 393 #开启限制IP连接数的时候需要使用 394 395 #limit_zone crawler $binary_remote_addr 10m; 396 397 #负载均衡配置 398 399 upstream www.xx.com { 400 401 #upstream的负载均衡,weight是权重,可以根据机器配置定义 权重。weigth参数表示 402 403 权值,权值越高被分配到的几率越大。 404 405 server 192.168.80.121:80 weight=3; 406 407 server 192.168.80.122:80 weight=2; 408 409 server 192.168.80.123:80 weight=3; 410 411 #nginx的upstream目前支持4种方式的分配 412 413 #1、轮询(默认) 414 415 #每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服 务器down掉,能自动剔 416 417 除。 418 419 #2、weight 420 421 #指定轮询几率,weight和访问比率成正比,用于后端服务器性 能不均的情况。 422 423 #例如 424 425 #upstream bakend { 426 427 # server 192.168.0.14 weight=10; 428 429 # server 192.168.0.15 weight=10; 430 431 #} 432 433 #2、ip_hash 434 435 #每个请求按访问ip的hash结果分配,这样每个访客固定访问一 个后端服务器,可以解决 436 437 session的问题。 438 439 #例如: 440 441 #upstream bakend { 442 443 # ip_hash; 444 445 # server 192.168.0.14:88; 446 447 # server 192.168.0.15:80; 448 449 #} 450 451 #3、fair(第三方) 452 453 #按后端服务器的响应时间来分配请求,响应时间短的优先分配。 454 455 #upstream backend { 456 457 # server server1; 458 459 # server server2; 460 461 # fair; 462 463 #} 464 465 #4、url_hash(第三方) 466 467 #按访问url的hash结果来分配请求,使每个url定向到同一个后 端服务器,后端服务器为 468 469 缓存时比较有效。 470 471 #例:在upstream中加入hash语句,server语句中不能写入 weight等其他的参数, 472 473 hash_method是使用的hash算法 474 475 #upstream backend { 476 477 # server squid1:3128; 478 479 # server squid2:3128; 480 481 # hash $request_uri; 482 483 # hash_method crc32; 484 485 #} 486 487 #tips: 488 489 #upstream bakend{#定义负载均衡设备的Ip及设备状态}{ 490 491 # ip_hash; 492 493 # server 127.0.0.1:9090 down; 494 495 # server 127.0.0.1:8080 weight=2; 496 497 # server 127.0.0.1:6060; 498 499 # server 127.0.0.1:7070 backup; 500 501 #} 502 503 #在需要使用负载均衡的server中增加 proxy_pass http://bakend/; 504 505 #每个设备的状态设置为: 506 507 #1.down表示单前的server暂时不参与负载 508 509 #2.weight为weight越大,负载的权重就越大。 510 511 #3.max_fails:允许请求失败的次数默认为1.当超过最大次数 时,返回 512 513 proxy_next_upstream模块定义的错误 514 515 #4.fail_timeout:max_fails次失败后,暂停的时间。 516 517 #5.backup: 其它所有的非backup机器down或者忙的时候,请 求backup机器。所以这 518 519 台机器压力会最轻。 520 521 #nginx支持同时设置多组的负载均衡,用来给不用的server来 使用。 522 523 #client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件 524 525 中用来做debug 526 527 #client_body_temp_path设置记录文件的目录 可以设置最多 3层目录 528 529 #location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡 530 531 } 532 #虚拟主机的配置 533 534 server 535 536 { 537 538 #监听端口 539 540 listen 80; 541 542 #域名可以有多个,用空格隔开 543 544 server_name www.xx.com xx.com; 545 546 index index.html index.htm index.php; 547 548 root /data/www/xx; 549 550 #对******进行负载均衡 551 552 location ~ .*.(php|php5)?$ 553 554 { 555 556 fastcgi_pass 127.0.0.1:9000; 557 558 fastcgi_index index.php; 559 560 include fastcgi.conf; 561 562 } 563 564 #图片缓存时间设置 565 566 location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ 567 568 { 569 570 expires 10d; 571 572 } 573 574 #JS和CSS缓存时间设置 575 576 location ~ .*.(js|css)?$ 577 578 { 579 580 expires 1h; 581 582 } 583 584 #日志格式设定 585 586 #$remote_addr与$http_x_forwarded_for用以记录客户端 的ip地址; 587 588 #$remote_user:用来记录客户端用户名称; 589 590 #$time_local: 用来记录访问时间与时区; 591 592 #$request: 用来记录请求的url与http协议; 593 594 #$status: 用来记录请求状态;成功是200, 595 596 #$body_bytes_sent :记录发送给客户端文件主体内容大小; 597 598 #$http_referer:用来记录从那个页面链接访问过来的; 599 600 #$http_user_agent:记录客户浏览器的相关信息; 601 602 #通常web服务器放在反向代理的后面,这样就不能获取到客户的 IP地址了,通过 603 604 $remote_add拿到的IP地址是反向代理服务器的iP地址。 605 606 #反向代理服务器在转发请求的http头信息中,可以增加 x_forwarded_for信息,用以记 607 608 录原有客户端的IP地址和原来客户端的请求的服务器地址。 609 610 log_format access '$remote_addr - $remote_user [$time_local] 611 612 "$request" ' 613 614 '$status $body_bytes_sent "$http_referer" ' 615 616 '"$http_user_agent" $http_x_forwarded_for'; 617 618 #定义本虚拟主机的访问日志 619 620 access_log /usr/local/nginx/logs/host.access.log main; 621 622 access_log /usr/local/nginx/logs/host.access.404.log log404; 623 624 #对 "/" 启用反向代理 625 626 location / { 627 628 proxy_pass http://127.0.0.1:88; 629 proxy_redirect off; 630 631 proxy_set_header X-Real-IP $remote_addr; 632 633 #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 634 635 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 636 637 #以下是一些反向代理的配置,可选。 638 639 proxy_set_header Host $host; 640 641 #允许客户端请求的最大单文件字节数 642 643 client_max_body_size 10m; 644 645 #缓冲区代理缓冲用户端请求的最大字节数, 646 647 #如果把它设置为比较大的数值,例如256k,那么,无论使用 firefox还是IE浏览 648 649 器,来提交任意小于256k的图片,都很正常。如果注释该指令, 使用默认的 650 651 client_body_buffer_size设置,也就是操作系统页面大小的 两倍,8k或者16k,问题就出现了。 652 653 #无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右 的图片,都返回 654 655 500 Internal Server Error错误 656 657 client_body_buffer_size 128k; 658 659 #表示使nginx阻止HTTP应答代码为400或者更高的应答。 660 661 proxy_intercept_errors on; 662 663 #后端服务器连接的超时时间_发起握手等候响应超时时间 664 665 #nginx跟后端服务器连接超时时间(代理连接超时) 666 667 proxy_connect_timeout 90; 668 669 #后端服务器数据回传时间(代理发送超时) 670 671 #后端服务器数据回传时间_就是在规定时间之内后端服务器必须 传完所有的数据 672 673 proxy_send_timeout 90; 674 675 #连接成功后,后端服务器响应时间(代理接收超时) 676 677 #连接成功后_等候后端服务器响应时间_其实已经进入后端的排队 之中等候处理(也 678 679 可以说是后端服务器处理请求的时间) 680 681 proxy_read_timeout 90; 682 683 #设置代理服务器(nginx)保存用户头信息的缓冲区大小 684 685 #设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情 况下这部分应答中包 686 687 含一个小的应答头,默认情况下这个值的大小为指令 proxy_buffers中指定的一个缓冲区的大小,不 688 689 过可以将其设置为更小 690 691 proxy_buffer_size 4k; 692 693 #proxy_buffers缓冲区,网页平均在32k以下的设置 694 695 #设置用于读取应答(来自被代理服务器)的缓冲区数目和大小, 默认情况也为分页大 696 697 小,根据操作系统的不同可能是4k或者8k 698 699 proxy_buffers 4 32k; 700 701 #高负荷下缓冲大小(proxy_buffers*2) 702 703 proxy_busy_buffers_size 64k; 704 705 #设置在写入proxy_temp_path时数据的大小,预防一个工作进 程在传递文件时阻塞 706 707 太长 708 709 #设定缓存文件夹大小,大于这个值,将从upstream服务器传 710 711 proxy_temp_file_write_size 64k; 712 713 } 714 715 #设定查看Nginx状态的地址 716 location /NginxStatus { 717 718 stub_status on; 719 720 access_log on; 721 722 auth_basic "NginxStatus"; 723 724 auth_basic_user_file confpasswd; 725 726 #htpasswd文件的内容可以用apache提供的htpasswd工具来产 生。 727 728 } 729 730 #本地动静分离反向代理配置 731 732 #所有jsp的页面均交由tomcat或resin处理 733 734 location ~ .(jsp|jspx|do)?$ { 735 736 proxy_set_header Host $host; 737 738 proxy_set_header X-Real-IP $remote_addr; 739 740 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 741 742 proxy_pass http://127.0.0.1:8080; 743 744 } 745 746 #所有静态文件由nginx直接读取不经过tomcat或resin 747 748 location ~ .*. 749 750 (htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|t xt|flv|mid|doc|ppt| 751 752 pdf|xls|mp3|wma)$ 753 754 { 755 756 expires 15d; 757 758 } 759 760 location ~ .*.(js|css)?$ 761 762 { 763 764 expires 1h; 765 766 } 767 768 } 769 770 } 771