资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Nginx 相关知识构建 Nginx WEB 服务器nginx engine x是 Igor Sysoev 编写的一个 HTTP 和反向代理服务器,另外它也可以作为邮件代理服务器。 它已经在众多流量很大的俄罗斯网站上使用了很长时间,这些网站包括 Yandex、Mail.Ru、VKontakte,以及 Rambler。据 Netcraft 统计,在 2012 年 8 月份, 世界上最繁忙的网站中有 11.48%使用 Nginx 作为其服务器或者代理服务器。目前互联网主流公司 360、百度、新浪、腾讯、阿里等都在使用 nginx 作为自己的 web 服务器。Nginx 由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个 location block(location 是 Nginx配置中的一个指令,用于 URL 匹配) ,而在这个 location 中所配置的每个指令将会启动不同的模块去完成相应的工作。Nginx 相对于 Apache 优点:1) 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5w/s2) 反向代理性能非常好。 (可用于负载均衡)3) 内存和 cpu 占用率低。 (为 Apache 的 1/5-1/10)4) 功能较 Apache 少(常用功能均有)5) 对 php 可使用 cgi 方式和 fastcgi 方式。Nginx WEB 安装首先需要安装 pcre 库,然后再安装 Nginx:#安装 pcre 支持 rewrite 库,也可以安装源码,注*安装源码时,指定 pcre 路径为解压源码的路径,而不是编译后的路径,否则会报错(make1: * /usr/local/pcre/Makefile Error 127 错误)yum install pcre-devel pcre -y#下载 Nginx 源码包cd /usr/src ;wget -c http:/nginx.org/download/nginx-1.4.2.tar.gz #解压 Nginx 源码包tar -xzvf nginx-1.4.2.tar.gz#进入解压目录,然后 sed 修改 Nginx 版本信息为 WScd nginx-1.4.2 ; sed -i -e s/1.4.2/g -e s/nginx/WS/g -e s/NGINX/WS/g src/core/nginx.h#预编译 Nginxuseradd www ;./configure -user=www -group=www -prefix=/usr/local/nginx -with-http_stub_status_module -with-http_ssl_module#.configure 预编译成功后,执行 make 命令进行编译make#make 执行成功后,执行 make install 正式安装make install#自此 Nginx 安装完毕/usr/local/nginx/sbin/nginx -t 检查 nginx 配置文件是否正确,返回 OK 即正确。rootlocalhost # /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successfulrootlocalhost #然后启动 nginx,/usr/local/nginx/sbin/nginx 回车即可。查看进程是否已启动:rootlocalhost # ps -ef |grep nginxnobody 5381 30285 0 May16 ? 00:04:31 nginx: worker process root 30285 1 0 2014 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginxroot 32260 32220 0 12:34 pts/0 00:00:00 grep nginxrootlocalhost #Nginx 虚拟主机配置在真实的服务器环境,为了充分利用服务器资源,一台 nginx web 服务器同时会配置N 个虚拟域名主机,即多个域名对于同样一个 80 端口。然后服务器 IP 数量很多,也可以配置基于多个 IP 对应同一个端口。vi 修改 nginx.conf server 段配置内容如下:#virtual hosts config server listen 80;server_name www.a.com;#access_log logs/host.access.log main;location / root html/a;index index.html index.htm;server listen 80;server_name www.b.com;#access_log logs/host.access.log main;location / root html/b;index index.html index.htm;创建两个不同的目录 mkdir p /usr/local/nginx/html/a,b,然后分别在两个目录创建两个不同的 index.html 网站页面即可。通过客户端配置 hosts 指向两个域名,然后在IE 浏览器访问测试效果。Nginx 性能优化随着访问量的不断增加,需要对 Nginx 和内核做相应的优化来满足高并发用户的访问,那下面在单台 Nginx 服务器来优化相关参数。1) Nginx.conf 配置优化:worker_processes 8;nginx 进程数,建议按照 cpu 数目来指定,一般为它的倍数。worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;为每个进程分配 cpu,上例中将 8 个进程分配到 8 个 cpu,当然可以写多个,或者将一个进程分配到多个 cpu。worker_rlimit_nofile 102400;这个指令是指当一个 nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与 nginx 进程数相除,但是 nginx 分配请求并不是那么均匀,所以最好与 ulimit -n 的值保持一致。use epoll;使用 epoll 的 I/O 模型。epoll 是 Linux 内核为处理大批量文件描述符而作了改进的poll,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。worker_connections 102400;每个进程允许的最多连接数,理论上每台 nginx 服务器的最大连接数为worker_processes*worker_connections。keepalive_timeout 60;keepalive 超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后继请求时,keepalive-timeout 功能可避免建立或重新建立连接。client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过 1k,不过由于一般系统分页都要大于 1k,所以这里设置为分页大小。分页大小可以用命令 getconf PAGESIZE 取得。open_file_cache max=102400 inactive=20s;这个将为打开文件指定缓存,默认是没有启用的,max 指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。open_file_cache_valid 30s;这个是指多长时间检查一次缓存的有效信息。open_file_cache_min_uses 1;open_file_cache 指令中的 inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在 inactive时间内一次没被使用,它将被移除。2) Linux 内核参数优化:net.ipv4.tcp_max_tw_buckets = 10000timewait 的数量,默认是 180000。net.ipv4.ip_local_port_range = 1024 65000允许系统打开的端口范围。net.ipv4.tcp_tw_recycle = 1启用 timewait 快速回收。net.ipv4.tcp_tw_reuse = 1开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接。net.ipv4.tcp_syncookies = 1开启 SYN Cookies,当出现 SYN 等待队列溢出时,启用 cookies 来处理。Nginx 参数深入理解Nginx 常用配置参数有 upstream,主要用于均衡后端多个实例:Nginx 的 upstream 目前支持 5 种算法分配方式:1) 轮询(默认 rr) 每个请求按时间顺序逐一分配到后端不同的服务器,如果后端某台服务器 down 掉,自动剔除,待恢复自动添加上。2) Weight 权重指定轮询权重,权重越高,处理的请求就越多,weight 和访问比率成正比,用于后端服务器性能不均的情况。 3) ip_hash 每个请求根据访问的 IP 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题,一般用于登录会话。4) fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 5) url_hash(第三方)upstream 的 fail_timeout 和 max_fails 参数是用来判断负载均衡 upstream 中的某个server 是否失效。在 fail_timeout 的时间内,nignx 与 upstream 中某个 server 的连接尝试失败了max_fails 次,则 nginx 会认为该 server 已经失效。在接下来的 fail_timeout 时间内,nginx 不再将请求分发给失效的 server。例如在 nginx.conf 里面配置如下的 tdt_app 均衡:upstream tdt_app server 10.10.1.11:8080 weight=1 max_fails=2 fail_timeout=30s;server 10.10.1.12:8080 weight=1 max_fails=2 fail_timeout=30s;Tdt_app 均衡两台后端 JAVA 服务,在 30 秒内 nginx 会与后端的某个 server 通信检测,如果检测连接失败 2 次,则 Nginx 会认为该 server 已经失效,然后踢出转发列表,然后在接下来的 30s 内,nginx 不再讲请求转发给失效的 server。另外,fail_timeout 设置的时间对响应时间没影响,这个响应时间是用proxy_connect_timeout 和 proxy_read_timeout 来控制的。proxy_connect_timeout : Nginx
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号