概述Nginx是由lgorSysoev为俄罗斯访问量第二大网站rambler.ru设计开发的。自2004年发布以来,借助开源的力量,已经接近成熟和完善。Nginx功能丰富,可以作为HTTP服务器、反向代理服务器、邮件服务器。支持FastCGI、SSL、VirtualHost、URLRewrite、Gzip等功能。并且支持很多第三方模块扩展。Nginx的稳定性、特性集、示例配置文件和低系统资源消耗使其后来居上。它的使用率为全球活跃网站的12.18%,即约2220万个网站。无论如何,我们在生产环境中使用nginx而不是apache。Nginx常用功能1、Http代理、反向代理:作为Web服务器最常用的功能之一,尤其是反向代理。这里我给两张图来解释正极剂和反应剂。具体可以看资料。Nginx作为反向代理时,性能稳定,可以提供灵活的转发功能。Nginx可以根据不同的正则匹配采用不同的转发策略,比如图片文件末尾到文件服务器,动态页面到web服务器。只要你写正则没问题,有相应的服务端解决方案,你想怎么玩就怎么玩。并且Nginx对返回结果进行错误页面跳转和异常判断。如果分布式服务器出现异常,他可以将请求重新转发给其他服务器,然后自动移除异常服务器。2、负载均衡Nginx提供的负载均衡策略有两种:内置策略和扩展策略。内置策略是循环法、加权循环法和IP哈希。扩展策略是无约束的,只有你想不到的,没有他做不到的,你可以参考所有的负载均衡算法一一找出来让他去实现。上面三张图,了解这三种负载均衡算法的实现iphash算法,对客户端请求的ip进行hash运算,然后根据hash将同一个clientip的请求分发到同一个服务器处理结果,可以解决Session不共享的问题。3、Web缓存Nginx可以对不同的文件做不同的缓存处理,配置灵活,支持FastCGI_Cache,主要用于缓存FastCGI动态程序。配合第三方ngx_cache_purge,可以对指定的URL缓存内容进行增删改查。Nginx配置文件结构Nginx服务器基本配置nginx文件结构...#globalblockevents{#eventsblock...}http#httpblock{...#httpglobalblockserver#serverblock{...#serverglobalblocklocation[PATTERN]#locationblock{...}location[PATTERN]{...}}server{...}...#httpglobalblock}1.全局块:配置全局影响nginx的指令。一般有nginx服务器运行的用户组、nginx进程pid存放路径、日志存放路径、配置文件导入、允许产生的worker进程数。2.事件块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选择哪种事件驱动模型来处理连接请求,是否允许同时接受多个网络连接,是否开启多个网络连接的序列化等。3.httpblock:可以嵌套多台服务器,代理、缓存、日志定义等大部分功能的配置和第三方模块的配置。如文件导入、mime-type定义、日志自定义、是否使用sendfile传输文件、连接超时、单次连接请求数等。4.Serverblock:配置虚拟主机的相关参数。一个http中可以有多个服务器。5.location块:配置请求的路由和各种页面的处理。举个配置文件给大家理解。###########每个命令必须以分号结尾。##################用户管理员管理员;#配置用户或组,默认是nobodynobody。#worker_processes2;#允许生成的进程数,默认为1#pid/nginx/pid/nginx.pid;#指定nginx进程运行文件的存放地址error_loglog/error.logdebug;#制定日志路径和水平。这个设置可以放在全局块、http块、服务器块中,级别如下:debug|info|notice|warn|error|crit|alert|emergevents{accept_mutexon;,默认为onmulti_accepton;#设置进程是否同时接受多个网络连接,默认关闭#useepoll;#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventportworker_connections1024;#最大连接数,默认为512}http{includemime.types;#文件扩展名和文件类型映射表default_typeapplication/octet-stream;#默认文件类型,默认为text/plain#access_logoff;#取消服务日志log_formatmyFormat'$remote_addr–$remote_user[$time_local]$request$status$body_bytes_sent$http_referer$http_user_agent$http_x_forwarded_for';#自定义格式access_loglog/access.logmyFormat;#combined是日志格式的默认值sendfileon;#允许sendfile传输文件,默认关闭,您可以http块、服务器块、位置块。sendfile_max_chunk100k;#每个进程每次调用的传输次数不能大于设置值,默认为0,即没有上限。keepalive_timeout65;#连接超时,默认75s,可以在http、server、location块中。upstreammysvr{server127.0.0.1:7878;server192.168.10.121:3333backup;#双机热备}error_page404https://www.baidu.com;#错误页面server{keepalive_requests120;#最大单连接请求数。listen4545;#监听端口server_name127.0.0.1;#监听地址位置~*^.+${#请求的url过滤,正则匹配,~区分大小写,~*不区分大小写。#rootpath;#根目录#indexvv.txt;#设置默认页面proxy_passhttp://mysvr;#请求重定向到mysvr定义的服务器列表deny127.0.0.1;#Rejectedipallow172.18.5.54;#Allowedip}}}以上是nginx的基本配置,需要注意以下几点:1.$remote_addr和$http_x_forwarded_for用于记录客户端的ip地址;$remote_user:用于记录客户端用户名;$time_local:用于记录访问时间和时区;$request:用于记录请求的url和http协议;$status:用于记录请求状态;success为200,$body_bytes_sent:记录发送给客户端的文件body内容的大小;$http_referer:用于记录从该页面访问的链接;$http_user_agent:记录客户端浏览器的相关信息;2、惊群现象:当一个网络连接到来时,多个休眠的进程被同事唤醒,但只有一个进程能拿到链接。这会影响系统性能。3.每个命令必须以分号结尾。摘要的篇幅有限。下面简单介绍一下nginx的配置,方便大家前车之鉴。如果想了解更多配置细节,可以看我之前的文章nginx宝典,会比较详细。
