本文转载自微信公众号凌浩宇。作者授权。转载本文请联系凌浩宇公众号。1.Nginx1).学习资源Nginx中文文档Nginx配置2)。NginxNginx是一款轻量级的web服务器/反向代理服务器和邮件(IMAP/POP3)代理服务器,特点是内存少,并发能力强。Nginx是俄罗斯人写的一个非常轻量级的HTTP服务器。Nginx,读作“engineX”,是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx由俄罗斯人IgorSysoev为俄罗斯访问量第二大的Rambler.ru网站开发,已经运行了两年半以上。IgorSysoev在构建项目时使用了基于BSD的许可证。3).Nginx特性作为HTTP服务器,Nginx具有以下基本特性:处理静态文件、索引文件和自动索引;打开文件描述符缓冲。无缓存反向代理加速,简单的负载均衡和容错。FastCGI,简单的负载均衡和容错。模块化结构。包括gzip、字节范围、分块响应和SSI过滤器等过滤器。如果单个页面上存在的多个SSI由FastCGI或其他代理服务器处理,则该处理可以并行运行,而无需相互等待。支持SSL和TLSSNI。Nginx是专门为性能优化而开发的,性能是其最重要的考虑因素,在实现上非常注重效率。支持内核Poll模型,经得起高负载的考验。有报道称它最多可以支持50,000个并发连接。Nginx具有很高的稳定性。对于其他的HTTP服务器,当遇到访问高峰,或者有人恶意发起慢速连接时,也很可能导致服务器物理内存频繁交换耗尽,失去响应,不得不重启服务器。比如现在的Apache一旦达到200多个进程,web响应速度就明显很慢了。但是Nginx采用了分阶段的资源分配技术,这使得它的CPU和内存占用率非常低。Nginx官方说是维护10000个不活跃的连接,它只占用2.5M内存,所以DOS之类的东西对Nginx来说基本没用。在稳定性方面,Nginx优于lighthttpd。Nginx支持热部署。启动特别容易,几乎可以做到7*24不间断运行,即使运行几个月也不需要重启。您还可以在不中断服务的情况下升级软件版本。Nginx采用主从模式,可以充分利用SMP的优势,减少工作进程对磁盘I/O的阻塞延迟。使用select()/poll()调用时,您还可以限制每个进程的连接数。Nginx的代码质量很高,代码很规范,技术成熟,模块扩展也很容易。特别值得一提的是强大的Upstream和Filter链。Upstream为编写反向代理、与其他服务器通信等模块打下了良好的基础。Filter链最酷的部分是每个过滤器不必等待前一个过滤器完成。它可以把前一个过滤器的输出作为当前过滤器的输入,有点像Unix的管道。这意味着模块可以开始压缩从后端服务器发送的请求,并且可以在模块从后端服务器接收到整个请求之前将压缩流转发给客户端。Nginx使用了os提供的一些新特性,如支持sendfile(Linux2.2+)、accept-filter(FreeBSD4.1+)、TCP_DEFER_ACCEPT(Linux2.4+)等,大大提高了性能。4).反向代理是一个代表,也是一个通道。这时候设计了两个角色,一个是代理角色,一个是目标角色。代理角色通过这个代理访问目标角色完成某些任务的过程称为Agent操作过程。一、正向代理的典型特点是客户端非常清楚要访问的服务器地址;服务器只知道请求来自哪个代理服务器,而不知道请求来自哪个具体的客户端;正向代理模式屏蔽或隐藏真实的客户端信息。二。nginx服务器接收到多个客户端向服务器发送的请求后,按照一定的规则分发给后端业务处理服务器进行处理。这时候~请求的来源是client是清楚的,但是不清楚这个请求是由哪个server处理的。nginx扮演着反向代理的角色。反向代理主要用于服务器集群分布式部署的情况。反向代理隐藏了服务器的信息!网站中的大部分功能也是直接使用nginx反向代理实现的。封装nginx等组件后,启动了一个高大上的名字:TengineIII。通常,我们在实际项目操作时,一个应用场景中很可能会存在正向代理和反向代理,正向代理代表客户端请求访问目标服务器。目标服务器为反向单兴趣服务器,反向代理多个真实业务处理服务器。具体拓扑图如下:5)。负载均衡客户端发送的请求数,nginx反向代理服务器接收到的请求数(负载),请求数按照一定的规则(平衡规则)分发到不同的服务器处理,分发接收到的请求的过程服务器按规则进行的负载均衡称为负载均衡。在负载均衡的实际项目运行过程中,有硬件负载均衡和软件负载均衡两种。硬件负载均衡也叫硬负载,比如F5负载均衡,相对来说成本高,成本高,但是数据的稳定性和安全性等都有很好的保障。中国移动、中国联通等公司会选择硬负载运营;出于成本原因,更多公司会选择使用软件负载平衡。软件负载均衡是利用现有技术结合主机硬件实现的消息队列分发机制。负载均衡调度算法如下:weightroundrobin(默认):将收到的请求按顺序一一分配给不同的后端服务器,即使在使用过程中有一台后端服务器宕机,nginx也会自动将该服务器从中移除队列,请求接受不会受到任何影响。这样就可以为不同的后端服务器设置一个权重值(weight)来调整请求在不同服务器上的分配比例;权重数据越大,分配给请求的概率越大;权重值,主要针对实际工作环境中不同的后端服务器硬件配置进行调整。ip_hash:每个请求根据发起客户端IP的哈希结果进行匹配。通过该算法,固定IP地址的客户端会一直访问同一个后端服务器,也在一定程度上解决了集群部署环境下session的问题。共享问题。公平:智能调整调度算法,根据后端服务器从请求处理到响应的时间动态均衡分配。响应时间短、处理效率高的服务器被分配给请求的概率高,响应时间长、处理效率低的服务器被分配。更少的请求;一种综合了前两者优点的调度算法。不过需要注意的是nginx默认是不支持fair算法的。如果要使用这种调度算法,请安装upstream_fair模块url_hash:根据访问的url的hash结果分配请求,每个请求的url会指向后端固定的服务器,可以提高缓存效率nginx用作静态服务器。另请注意,nginx默认不支持此调度算法。如果要使用,需要安装nginxhash包6)。Windows安装一、Nginx下载解压二.双击nginx.exe,浏览器访问http://localhost/即可三。命令行打开nginxIV。命令行关闭#强制停止nginx服务器,如果有未处理的数据,丢弃nginx-sstop#优雅地停止nginx服务器,如果有未处理的数据,等待处理完成后停止nginx-squit7)。nginx配置nginx服务器的配置信息主要集中在nginx.conf配置文件(\nginx-1.14.0\conf\nginx.conf)main#globalconfigurationevents{#nginx工作模式配置}http{#http设置....server{#Server主机配置....location{#Routing配置....}locationpath{....}locationotherpath{....}}server{....location{....}}upstreamname{#loadbalancingconfiguration....}}main:用于配置nginx全局信息events:用于配置nginx工作模式http:用于配置一些http协议信息server:用于配置服务器访问信息的配置location:访问路由配置upstream:负载均衡配置I.mainmodule#usernobodynobody;worker_processes2;#error_loglogs/error.log#error_loglogs/error.lognotice#error_loglogs/error.loginfo#pidlogs/nginx.pidworker_rlimit_nofile1024;user用于指定nginxworker进程的运行用户和用户组。默认nobody账号运行worker_processes指定nginx开启的子进程数。运行过程中,监控每个进程的内存消耗(一般为几M~几十M不等)根据实际情况调整,通常为CPU核数的整数倍error_log定义的位置和输出级别错误日志文件不要[debug/info/notice/warn/error/crit]pid用于指定进程id的存储文件的位置worker_rlimit_nofile用于指定一个进程最多可以打开的文件数的描述II.事件模块事件{worker_connections1024;multi_accepton;useepoll;}worker_connections指定可以同时接收的连接数的上限。这里必须注意,连接数的上限是和worker进程共同决定的multi_accept配置指定nginx在收到新的连接通知后应接受尽可能多的连接。useepoll配置指定了线程轮询的方式。如果是linux2.6+,使用epoll;如果是Mac等BSD,请使用KqueueIII的http模块作为web服务器。http模块是nginx的核心模块,配置项很多。项目中会有很多实际的业务场景,需要根据硬件信息进行适当的配置。通常,默认配置即可!http{###基本配置##sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;types_hash_max_size2048;#server_tokensoff;#server_names_hash_bucket_size64;#server_name_in_redirectoff;include/etc/nginx/mime.types;default_typeapplication/re;#octet#st#SSL证书配置##ssl_protocolsTLSv1TLSv1.1TLSv1.2;#DroppingSSLv3,ref:POODLEssl_prefer_server_cipherson;###日志配置##access_log/var/log/nginx/access.log;error_log/var/log/nginx/error.log;###Gzip压缩配置##gzipon;gzip_disable"msie6";#gzip_varyon;#gzip_proxiedany;#gzip_comp_level6;#gzip_buffers168k;#gzip_http_version1.1;#gzip_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rs/javascript;###虚拟主机配置##include/etc/nginx/conf.d/*.conf;include/etc/nginx/sites-enabled/*;}=>基本配置sendfileon:配置on让sendfile发挥作用,将文件的回写过程交给数据缓冲区来完成,而不是在应用程序中完成。这有利于性能提升tc_nopushon:让nginx将所有的头文件放在一个数据包中发送,而不是一个一个发送tcp_nodelay。上:让nginx不缓存数据,而是一段一段的发送。如果数据传输有实时性要求,可以配置。发送一小段数据后可以立即得到返回值,但不要滥用keepalive_timeout10:给客户端分配连接超时时间,服务器会在这个时间后关闭连接一般设置时间越短,可以让nginx工作的越连续client_header_timeout10:设置请求头的超时时间client_body_timeout10:设置请求体的超时时间send_timeout10:指定客户端响应超时时间,如果间隔client的两次操作之间超过,此时server会关闭链接limit_conn_zone$binary_remote_addrzone=addr:5m:设置用于保存各种key的共享内存的参数,limit_connaddr100:设置数量的上限ofconnectionsforagivenkeyserver_tokens:虽然不会让nginx的执行速度更快,但是可以在错误页面关闭nginx版本提示,有利于提高网站的安全性。include/etc/nginx/mime.types:指定在当前文件中包含另一个文件的命令default_typeapplication/octet-stream:指定处理的文件类型默认可以是binarytype_hash_max_size2048:混淆数据,影响碰撞三列的rate,值越大,消耗的内存越多,hashkey碰撞率会降低,检索速度会更快;值越小,key占用的内存越少,冲突率越高,检索速度越慢=>日志配置access_loglogs/access.log:设置存储访问记录的日志error_loglogs/error.log:设置存储的日志recorderrors=>SSLcertificateencryptionssl_protocols:该指令用于启动特定的加密协议。在1.1.13和1.0.12版本之后,nginx默认使用ssl_protocolsSSLv3TLSv1TLSv1.1TLSv1.2、TLSv1.1和TLSv1.2来保证OpenSSL>=1.0.1,SSLv3还有很多地方在使用但是有漏洞很多。sslpreferserverciphers:设置协商加密算法时,优先使用我们服务器的密码套件,而不是客户端浏览器的密码套件=>压缩配置gzip告诉nginx以gzip压缩的形式发送数据。这将减少我们发送的数据量。gzip_disable禁用指定客户端的gzip功能。我们将其设置为IE6或更低版本以使我们的解决方案广泛兼容。gzip_static告诉nginx在压缩之前寻找预先gzip的资源。这需要你预先压缩你的文件(在这个例子中被注释掉),允许你使用高压缩比,这样nginx就不必再压缩文件了。gzip_proxied启用或禁用基于请求和响应的响应流的压缩。我们设置为any,表示所有请求都会被压缩。gzip_min_length设置启用数据压缩的最小字节数。如果请求小于1000字节,则不建议对其进行压缩,因为压缩这么小的数据会减慢处理该请求的所有进程。gzip_comp_level设置数据的压缩级别。此级别可以是1-9之间的任何值,9较慢但压缩率较高。我们将其设置为4,这是一个折衷设置。gzip_type设置需要压缩的数据格式。=>文件缓存配置open_file_cache在开启缓存的时候,还指定了缓存的上限和缓存的时间。我们可以设置一个相对较高的上限时间,这样我们就可以在20秒不活动后清除它们。open_file_cache_valid指定检测open_file_cache中正确信息的时间间隔。open_file_cache_min_uses定义了open_file_cache中指令参数的非活动时间内的最小文件数。open_file_cache_errors指定在搜索文件时是否缓存错误消息,包括再次将文件添加到配置中。我们还包括在单独文件中定义的服务器模块。如果您的服务器模块不在这些位置,则必须修改此行以指定正确的位置。四、server模块srever模块配置是http模块中的一个子模块,用于定义一个虚拟访问主机,即一个虚拟服务器server{listen80;server_namelocalhost192.168.1.100;root/nginx/的配置信息www;索引索引。phpindex.htmlindex.html;charsetutf-8;access_loglogs/access.log;error_loglogs/error.log;...}server:一个虚拟主机配置,一个http可以配置多个serverserver_name:使用强制指定ip地址或者域名,多个配置用空格隔开/路径中配置的网页默认编码格式access_log:用于指定访问记录日志在虚拟主机服务器中的存放路径error_log:用于指定访问错误日志的存放路径在虚拟主机服务器中v.location模块location模块是nginx配置中出现最多的配置,主要用于配置路由访问信息。在路由访问信息配置中,关联了反向代理、负载均衡等各种功能,所以location模块也是一个很重要的配置模块=>基本配置location/{root/nginx/www;index.htmlphpindex.htmlindex.htm;}location/:表示匹配访问根目录root:指定访问根目录时用于访问虚拟主机的web目录index:不指定访问具体资源时,资源文件列表默认显示=>反向代理配置方法是通过反向代理代理服务器访问方式,通过proxy_set配置透明客户端访问location/{proxy_passhttp://localhost:8888;proxy_set_headerX-real-ip$remote_addr;proxy_set_headerHost$http_host;}=>uwsgi以wsgi方式配置服务器配置访问方式location/{includeuwsgi_params;uwsgi_passlocalhost:8888}VI.upstream模块upstream模块主要负责负载均衡的配置,通过默认的round-robin调度方式将请求分发到后端服务器。简单的配置方法如下:upstreamname{ip_hash;server192.168.1.100:8000;server192.168.1.100:8001down;server192.168.1.100:8002max_fails=3;server192.168.1.100:8003fail_timeout=20s;server192。168.1。100:8004max_fails=3fail_timeout=20s;}ip_hash:指定请求调度算法,默认为weight权重round-robin调度,可以指定serverhost:port:分发服务器列表configurationdown:表示主机暂停服务max_fails:表示失败次数上限,超过失败次数则暂停服务fail_timeout:表示如果接受请求失败,暂停指定时间后重新发起请求
