nginx.conf
#运行用户 #user nobody; #开启进程数 <=CPU数 worker_processes 1; #错误日志保存位置 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #进程号保存文件 #pid logs/nginx.pid; #等待事件 events { #Linux下打开提高性能 #事件响应模式为为高效的 poll 模式 use epoll; #(使用epoll的I/O 模型 补充说明: 与apache相类,nginx针对不同的操作系统,有不同的事件模型 A)标准事件模型 Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll 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. 为了防止出现内核崩溃的问题, 有必要安装安全补丁) #每个进程最大连接数(最大连接=连接数x进程数) #这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文 #件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。 #现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。 #这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。 worker_connections 1024; } http { #文件扩展名与文件类型映射表 include mime.types; #默认文件类型 default_type application/octet-stream; #日志文件输出格式 这个位置相于全局设置 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #请求日志保存位置 #access_log logs/access.log main; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; #打开发送文件 sendfile on; tcp_nopush on; #keepalive_timeout 0; #keepalive超时时间 keepalive_timeout 65; #客户端上传文件大小控制 client_max_body_size 8m; #打开gzip压缩 gzip on; ## 这里取得原始用户的IP地址 map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } ## 针对原始用户 IP 地址做限制 limit_conn_zone $clientRealIp zone=TotalConnLimitZone:20m ; limit_conn TotalConnLimitZone 50; limit_conn_log_level notice; ## 针对原始用户 IP 地址做限制 limit_req_zone $clientRealIp zone=ConnLimitZone:20m rate=10r/s; #limit_req zone=ConnLimitZone burst=10 nodelay; limit_req_log_level notice; ## 避免出现 502 fastcgi_buffers 8 128k; send_timeout 60; #设定负载均衡的服务器列表 upstream mytomcats {
#每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。(但是没办法解决负载均衡了)
#ip_hash;
#weigth参数表示权值,权值越高被分配到的几率越大 #代表请求分发的百分比,默认为1. #max_fails参数表示 最大失败3次 #fail_timeout参数表示 请求失败后 多少秒内不访问 (默认10s)
#buckup 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
#down 表示单前的server暂时不参与负载 server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=20s; server 127.0.0.1:8080 weight=2 max_fails=3 fail_timeout=20s;
server 127.0.0.1:8082 weight=3 max_fails=3 fail_timeout=20s buckup;
server 127.0.0.1:8083 weight=4 max_fails=3 fail_timeout=20s down; } server { #nginx监听的端口 listen 80; #nginx过滤的ip或者域名 多个空格 server_name 127.0.0.1 www.baidu.com; #字符 charset UTF-8; #防止爬虫 if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403; } #查看nginx实时状态 location /status { #配置验证信息 auth_basic "提示信息"; #用户名密码保存地址 auth_basic_user_file /usr/local/nginx/conf/htpasswd; #监控模块 stub_status on; #关闭日志 access_log off; } #静态文件 location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { #expires 30d; (过期时间,30天,可适量调整) root /web/www/html/; } #过滤所有以.html结尾的,必须要验证 location ~ \.html$ { auth_basic "Restricted"; auth_basic_user_file /usr/local/nginx/conf/htpasswd; access_log off; } #所有以 /2.0 目录后面的代理 location ^~/2.0/ { ## 最多 5 个排队, 由于每秒处理 10 个请求 + 5个排队,你一秒最多发送 15 个请求过来,再多就直接返回 503 错误给你了 limit_req zone=ConnLimitZone burst=5 nodelay; proxy_pass http://mytomcats; proxy_redirect off; #保留客户端请求的域名信息 proxy_set_header Host $host; #保留客户端请求的真实 IP 地 址,用于某些访问统计 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 proxy_buffer_size 4k; #proxy_buffer缓冲区,网页平均在32k以下的话,这样设置 proxy_buffers 4 32k; #高负荷下缓冲大小 (proxy_buffers*2) proxy_busy_buffers_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器当代理下载的文件超过该参数设置的大小,nginx会先将文件写入临时目录?(缺省为????nginx?安装目下/proxy_temp目录) proxy_temp_file_write_size 64k; } #禁止访问所有.txt文件 # location ~/\.txt { # deny all; # } } # another virtual host using mix of IP-, name-, and port-based configuration server { #多监听 #listen localhost:8666; #主机名 #server_name LIULJ2576; #WEB文件路径 #root E:/Portal; #默认首页 #index HomePage.html; #location / { # #这里相当于局部变量 # root E:/Portal; # index HomePage.html; #} } # HTTPS server HTTPS SSL加密服务器 # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }