nginx基本配置与参数说明以及Nginx中的upstream轮询机制介绍

阅读:343 2019-03-19 14:41:42 来源:新网

nginx(发音为[enginex])专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对并发连接的高处理能力(单台物理服务器可支持30000~50000个并发连接),是一个高性能的http和反向代理服务器,也是一个imap/pop3/smtp代理服。

实际使用中,nginx主要:反向代理、负载均衡

#运行用户

usernobody;

#启动进程,通常设置成和cpu的数量相等

worker_processes1;

#全局错误日志及pid文件

#error_loglogs/error.log;#error_loglogs/error.lognotice;#error_loglogs/error.loginfo;

#pidlogs/nginx.pid;

#工作模式及连接数上限

events{

#epoll是多路复用io(i/omultiplexing)中的一种方式,

#仅用于linux2.6以上内核,可以大大提高nginx的性能

useepoll;

#单个后台workerprocess进程的最大并发链接数

worker_connections1024;

#并发总数是worker_processes和worker_connections的乘积

#即max_clients=worker_processes*worker_connections

#在设置了反向代理的情况下,max_clients=worker_processes*worker_connections/4为什么

#为什么上面反向代理要除以4,应该说是一个经验值

#根据以上条件,正常情况下的nginxserver可以应付的最大连接数为:4*8000=32000

#worker_connections值的设置跟物理内存大小有关

#因为并发受io约束,max_clients的值须小于系统可以打开的最大文件数

#而系统可以打开的最大文件数和内存大小成正比,一般1gb内存的机器上可以打开的文件数大约是10万左右

#我们来看看360m内存的vps可以打开的文件句柄数是多少:

#$cat/proc/sys/fs/file-max

#输出34336

#32000<34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内

#所以,worker_connections的值需根据worker_processes进程数目和系统可以打开的最大文件总数进行适当地进行设置

#使得并发总数小于操作系统可以打开的最大文件数目

#其实质也就是根据主机的物理cpu和内存进行配置

#当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。

#ulimit-shn65535

}

#设定http服务器

http{

#设定mime类型,类型由mime.type文件定义

includemime.types;

default_typeapplication/octet-stream;

#设定日志格式

log_formatmain'$remote_addr-$remote_user[$time_local]"$request"''$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';

access_loglogs/access.logmain;

#sendfile指令指定nginx是否调用sendfile函数(zerocopy方式)来输出文件,

#对于普通应用,必须设为on,

#如果用来进行下载等应用磁盘io重负载应用,可设置为off,

#以平衡磁盘与网络i/o处理速度,降低系统的uptime.

sendfileon;

#tcp_nopushon;

#连接超时时间

#keepalive_timeout0;

keepalive_timeout65;

tcp_nodelayon;

#fastcgi相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。

fastcgi_connect_timeout300;fastcgi_send_timeout300;fastcgi_read_timeout300;fastcgi_buffer_size64k;fastcgi_buffers464k;fastcgi_busy_buffers_size128k;fastcgi_temp_file_write_size128k;

#upstream的负载均衡,(以权重方式分发),weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。

upstreamblog.nginx.com{server192.168.80.121:80weight=3;server192.168.80.122:80weight=2;server192.168.80.123:80weight=3;}

#upstream的负载均衡,(以nginx热备方式分发),其它所有的非backupserverdown或者忙的时候,请求backup机器。所以这台机器压力会最轻。

upstreamblog.nginx.com{server192.168.80.121:80;server192.168.80.122:80;server192.168.80.123:80backup;}

#开启gzip压缩

gzipon;

gzip_disable"msie[1-6].";

#设定请求缓冲

client_header_buffer_size128k;

large_client_header_buffers4128k;

#设定虚拟主机配置

server{

#侦听80端口

listen80;

#定义访问地址,域名可以有多个,用空格隔开

server_namewww.nginx.cnnginx.cn;

#定义服务器的默认网站根目录位置

roothtml;

#设定本虚拟主机的访问日志

access_loglogs/nginx.access.logmain;

#默认请求

location/{#定义首页索引文件的名称indexindex.phpindex.htmlindex.htm;}

#对“/”启用反向代理

location/{proxy_passhttp://127.0.0.1:88;proxy_redirectoff;proxy_set_headerx-real-ip$remote_addr;#后端的web服务器可以通过x-forwarded-for获取用户真实ipproxy_set_headerx-forwarded-for$proxy_add_x_forwarded_for;#以下是一些反向代理的配置,可选。proxy_set_headerhost$host;client_max_body_size10m;#允许客户端请求的最大单文件字节数client_body_buffer_size128k;#缓冲区代理缓冲用户端请求的最大字节数,proxy_connect_timeout90;#nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout90;#后端服务器数据回传时间(代理发送超时)proxy_read_timeout90;#连接成功后,后端服务器响应时间(代理接收超时)proxy_buffer_size4k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers432k;#proxy_buffers缓冲区,网页平均在32k以下的设置proxy_busy_buffers_size64k;#高负荷下缓冲大小(proxy_buffers*2)proxy_temp_file_write_size64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传}

#设定查看nginx状态的地址

location/nginxstatus{stub_statuson;access_logon;auth_basic“nginxstatus”;auth_basic_user_fileconf/htpasswd;#htpasswd文件的内容可以用apache提供的htpasswd工具来产生。}

#本地动静分离反向代理配置

#所有jsp的页面均交由tomcat或resin处理

location~.(jsp|jspx|do)?${proxy_set_headerhost$host;proxy_set_headerx-real-ip$remote_addr;proxy_set_headerx-forwarded-for$proxy_add_x_forwarded_for;proxy_passhttp://127.0.0.1:8080;}

#所有静态文件由nginx直接读取不经过tomcat或resin

location~.*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${expires15d;}location~.*.(js|css)?${expires1h;}

#定义错误提示页面

error_page500502503504/50x.html;location=/50x.html{}

#静态文件缓存时间设置,nginx自己处理

location~^/(images|javascript|js|css|flash|media|static)/{#过期30天,静态文件不怎么更新,过期可以设大一点,#如果频繁更新,则可以设置得小一点。expires30d;}

#php脚本请求全部转发到fastcgi处理.使用fastcgi默认配置.

location~.php${fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramscript_filename$document_root$fastcgi_script_name;includefastcgi_params;}

#禁止访问.htxxx文件

location~/.ht{denyall;}

}

}

http://my.oschina.net/xsh1208/blog/199674

nginx中upstream有以下几种方式:

1、轮询(weight=1)默认选项,当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

upstreambakend{server192.168.1.10;server192.168.1.11;}

2、weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。如果后端服务器down掉,能自动剔除。比如下面配置,则1.11服务器的访问量为1.10服务器的两倍。

upstreambakend{server192.168.1.10weight=1;server192.168.1.11weight=2;}

3、ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。如果后端服务器down掉,要手工down掉。

upstreamresinserver{ip_hash;server192.168.1.10:8080;server192.168.1.11:8080;}

4、fair(第三方插件)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstreamresinserver{server192.168.1.10:8080;server192.168.1.11:8080;fair;}

5、url_hash(第三方插件)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。在upstream中加入hash语句,hash_method是使用的hash算法

upstreamresinserver{server192.168.1.10:8080;server192.168.1.11:8080;hash$request_uri;hash_methodcrc32;}

设备的状态有:1.down表示单前的server暂时不参与负载2.weight权重,默认为1。weight越大,负载的权重就越大。3.max_fails允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误4.fail_timeoutmax_fails次失败后,暂停的时间。5.backup备用服务器,其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

启动nginx:nginx-c/path/to/nginx.conf重启nginx:nginx-sreload:修改配置后重新加载生效nginx-sreopen:重新打开日志文件nginx-t-c/path/to/nginx.conf测试nginx配置文件是否正确关闭nginx:nginx-sstop:快速停止nginxquit:完整有序的停止nginx其他的停止nginx方式:ps-ef|grepnginxkill-quit主进程号:从容停止nginxkill-term主进程号:快速停止nginxpkill-9nginx:强制停止nginx平滑重启nginx:kill-hup主进程号

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服