-
充分理解跨域问题并解决跨域问题
现在越来越多的项目就算是一个管理后端也偏向于使用前后端分离的部署方式去做,为了顺应时代的潮流,前后端分离就产生了跨域问题,所以许多同学把跨域和前后端分离项目联系在了一起,其实跨域产生的原因并不是前后端分离导致的,那我们一起来看一下,希望可以靠这一篇文章解答大家所有的跨域问题。跨域产生的条件使用xmlHttpRequest,即我们通常说的ajax请求浏览器做了这个事访问的域名不同,即访问的html页面是a域名下的,但内部js发送的ajax请求的目标地址却是b域名以上三个条件缺一不可,尤其是第三个条件许多做移动端的同学可能都没有听过,因为移动端爽爽的用各种http请求狂发不同的域名,但是浏览器不允许我们这么做,为了一个词如何解决跨域问题解决跨域问题的根本就是要打破上述的三个限制中的任何一个,我们来看一下逐个击破的方式JSONP方式jsonp是打破第一重限制,用了XMLHttpRequest就跨域,那我不用这种方式了,我们怎么做的,来看一段jquery的带jsonp的ajax请求看似用了ajax请求,其实内部完全不是那么回事,多了jsonp和jsonpCallback选项,它内部将代码翻译并把页面上的dom操作成这样这个时候,html页面的scriptsrc标签回去访问api.map.baidu.com的服务端,由于script,img这种标签浏览器是不受xmlhttprequest限制的,可以随意访问,这个时候对应的后端代码取得address参数,最后根据双方约定好的callback参数,返回一个被包装后的json,即然后浏览器直接执行了对应的这个showLocation()…等等,这个不就相当于执行了我们上面定义的window.showLocation方法并且传入了我们需要的json返回吗,那我们的ajaxsuccess方法里就可以得到这个返回类型了,并且没有跨域,是不是很精妙。CORSCORS是一个W3C标准,全称是"跨域资源共享"(Cross-originresourcesharing)跨域资源共享CORS详解。这个玩样用于“破解”掉浏览器的限制,说是破解其实也是浏览器认识到了一些头部就放行了的意思,需要在http的response内多设置几个头部Access-Control-Allow-Origin:*表明允许所有的origin(浏览器的html页面路径)访问,而并非是同源的originAccess-Control-Request-Method:*表明允许所有的httprequest头,访问,因为浏览器在触发如下几个场景会在发送真正的数据前发送options这样的预检请求检测,一旦预检通过后才会发送真正的get或post数据请求,这个时候我们按照cors的设置就需要允许对应的method访问,触发的几种情况包括1:请求的方法不是GET/HEAD/POST2:POST请求的Content-Type并非application/x-www-form-urlencoded,multipart/form-data,或text/plain3:请求设置了自定义的header字段等Access-Control-Allow-Headers:*设置所有header均可以被允许,这个配置联通上述的requestmethodoptions检测一起使用,可以在需要自定义header的场景下使用Access-Control-Allow-Credentials:true这个参数只有当需要跨域使用cookie传递时才需要设置为true,并且需要前端ajax配置使用xhrField:{withCredential:true}时才能传递cookie,另外safari和最新版本的chrome浏览器还需要在设置内放开对应限制,当这个参数被设置成true时候Access-Control-Allow-Origin就不能设置为*,否则就变成任何origin域都能允许传递cookie了,可将其调整为前端origin字段传什么我就用什么若你使用的是nginx反向代理,则可以直接在nginx反向代理上配置代理法打破不同源的限制,我只要让它同源就可以了,比如要我的静态页面是http://a.com/index.html动态ajax请求访问的是http://b.com/api/***我只需要将对应的服务部署在不同的机器上,然后使用一个公共的c.com的域名作为nginx反向代理的入口域名,在将静态服务和动态服务分别挂在后面的被代理局域网服务器内,修改配置
LoveIT 2020-12-15Nginx -
Nginx配置实例—反向代理
1、配置示例1要求:在浏览器地址栏中输入www.123.com,跳转到Linux服务器中的tomcat主页面声明:本次实验在我电脑的Linux虚拟机上进行,Linux系统信息如下:图1实验系统信息1.1准备工作(1)安装nginx(参考:Nginx快速入门—基本概念以及在Linux上安装Nginx(2)启动一个tomcat(注意:在启动之前一定要配置好Java环境变量,参考:记一次在云服务器上部署项目的实践经历)(3)tomcat启动后在本地host文件中配置域名映射:配置完成后在浏览器中输入www.123.com:8080如果能看到tomcat的页面,就说明配置的没有问题。图2host配置测试1.2nginx配置反向代理接下来我们来配置nginx,nginx一入门我们都知道在nginx的安装目录下的conf/nginx.conf是nginx的默认配置文件,因此打开它默认配置文件并简单配置如下内容(当然,你也可以使用nginx-c指定配置文件),简单配置如下:测试结果:配置完成后重新加载配置文件后,直接访问www.123.com,如果可以看到tomcat的首页那就大功告成啦!图2nginx反向代理配置示例1测试2、配置示例2要求:在浏览器地址栏中输入www.123.com/login,请求跳转到127.0.0.1:8080在浏览器地址栏中输入www.123.com/user,请求跳转到127.0.0.1:80812.1准备工作启动两个tomcat,并在监听8080端口的tomcat的webapps目录下新建文件夹login以及文件index.html;在监听8081端口的tomcat的webapps目录下新建文件夹user以及文件index.html;2.2配置nginx按照要求,nginx服务器要根据不同的请求路径把不同的请求转发到不同的tomcat中处理,这里就需要用到正则表达式来匹配路径,具体的配置如下:测试结果:图3nginx反向代理配置示例2测试3、location匹配规则详解在上面的配置中使用到了正则匹配,nginx官方文档给出location语法如下:location语法:location[=|~|~*|^~]/uri/{…}其中,方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式。uri是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准的uri";也可以包含正则,这种模式被称为"正则uri",具体可用的标识符如下:**=**:必须与指定的模式严格匹配,如果匹配成功就停止向下搜索,并立即处理代理逻辑~:必须以指定模式开始,并且区分大小写~*:必须以指定模式开始,并且不区分大小写**^~**:前缀匹配,不支持正则,如果模式匹配,那么就停止搜索其他模式了。无:普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。备注:1、如果uri里面包含正则表达式,就必须使用~或~*标识符;2、针对~和~*匹配标识符,可以在前面加上!来取反,如下:*!~表示正则不匹配,区分大小写。*!~*表示正则不匹配,不区分大小写。3.1精确匹配(=)示例3.2区分大小写正则匹配(~)示例3.3不区分大小写正则匹配(~*)示例3.4标准匹配(^~)示例3.5普通匹配(最长字符匹配)示例4、location匹配优先级1、如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。2、普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。3、正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)。4、在location中,location/可以匹配所有的请求,但是他的优先级是最低的。总结匹配规则如下:(location=)>(location完整路径)>(location^~路径)>(location~,~*正则顺序)>(location部分起始路径)>(location/)即(精确匹配)>(最长字符串匹配,但完全匹配)>(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)
LoveIT 2020-05-31Nginx -
基于Linux平台运行的Nginx配置阿里云 SSL证书实现HTTPS访问
1、前提工作1.1准备一台具有公网IP的Linux服务器1.2申请一个域名,并将此域名和服务器的公网IP绑定1.3在阿里开发者平台上申请并获取SSL证书(1)在开启SSL后,来到下图所示页面,选择一个证书类型后,不用管他上面的报价,点击申请。(2)在接下来的这个页面中,选择你想要的证书服务类型(3)购买成功之后,跟随系统的引导完成证书的签发之后点击下载SSL证书。这里我下载了Nginx。证书有两个,一个是证书文件*.pem,另一个是证书密钥文件*.key。1.4在服务器上安装Nginx服务器2、配置SSL证书登录Nginx服务器,在Nginx安装目录(默认Nginx安装目录为/usr/local/nginx/conf)下创建cert目录,并将下载的证书文件和密钥文件拷贝到cert目录中。上传好证书和秘钥文件后,我们打开改Nginx安装目录/conf/nginx.conf文件。找到以下配置信息:按照下文中注释内容修改nginx.conf文件:修改后保存之后别急着重启,先检查一下配置是否正确:[root@ecs-sn3-medium-2-linux-20191128162047conf]#../sbin/nginx-tnginx:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoknginx:configurationfile/usr/local/nginx/conf/nginx.conftestissuccessful没问题后再重启Nginx,就可以使用https了。注意!如果检查时提示nginx:[emerg]the"ssl"parameterrequiresngx_http_ssl_modulein/usr/local/nginx/conf/nginx.conf:xxx,那就说明我们在安装Nginx的时候没有安装http_ssl_module模块,这一点我们可以使用nginx-V命令来查看。解决办法:重新配置Nginx安装http_ssl_module模块即可。(1)进入到nginx的源码包(2)在源码包下执行如下命令:(3)使用make命令编译(不要执行makeinstall,执行后就会覆盖安装已经存在Nginx)最终效果:
LoveIT 2020-03-23Nginx -
Nginx配置实例—nginx+keepalived实现主备服务器的高可用集群
1、什么是负载均衡高可用?nginx作为负载均衡服务器,所有请求都到了nginx,可见nginx处于非常重要的位置,如果nginx服务器宕机将会导致后端web服务将无法提供,后果严重。为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(HighAvailablitity)监控程序,通过传送诸如“Iamalive”这样的信息来监控对方的运行状况,当备份机不能再一定时间内收到这样的信息,它就接管主服务器的服务ip并继续提供负载均衡服务;当备份管理器又从主管服务器收到“Iamalive”这样的信息时,它就释放服务ip地址,这样的主服务器就开始再次提供负载均衡服务。2、Nginx+Keepalived实现主备2.1什么是keepalived?(1)keepalived是进群工作管理中保证集群高可用的一个服务软件,用来防止单点故障。(2)keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。2.2keepalived的工作原理keepalived是以vrrp协议为实现基础的,vrrp全称VirtualRouterRedundancyProtocol,即虚拟路由冗余协议。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP=virtualIPAddress,即虚拟ip地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。keepalived主要有三个模块,分别是core、check、VRRP。core模块为keepalived的核心,负载进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。3、配置Nginx高可用集群图nginx高可用架构示意图我的实验环境:1).两台nginx,一主一备分别在独立的Linux系统上运行,ip分别是:192.168.92.128和192.168.92.1342).分别在192.168.92.128和192.168.92.134两台服务器上安装nginx和keepalived3.1安装nginxnginx的安装请参考Nginx快速入门—基本概念以及在Linux上安装Nginx这里为了体现效果,我把nginx的默认index.html页面修改一下图3.1.1masternginx的修改图3.1.2backupnginx的修改3.2安装和配置keepalived直接输入下面的命令安装keepalived:安装完成后会在/etc下生成一个配置文件,它的绝对路径是/etc/keepalived/keepalived.conf,它就是用来配置nginx主备关系的配置文件。主nginx的keepalived配置备份nginx的keepalived配置之后在/etc/keepalived目录下新建检测脚本,内容如下:之后给脚本权限:keepalived的相关命令keepalived的启动、重启、和停止命令:1.systemctlstartkeepalived.service #启动keepalived2.systemctlrestartkeepalived.service #重启keepalived3.systemctlstopkeepalived.service #停止keepalived启动后可以使用:systemctlstatuskeepalived.service查看keepalived的状态,如果发现异常及时修改直到正常启动,正常运行截图:图3.2.1正常启动keepalived或者可以使用命令:`ps-ef|grepkeepalived`两边的nginx和keepliaved都启动后,在浏览器中输入我们刚才配置的虚拟ip,不出意外应该走的是主nginx,如下图:图3.2.2配置成功4、测试故障转移4.1主服务器正常提供服务初始时候,nginx主服务器正常,将vip绑定到自身,对外提供服务,从服务器始终与主服务器保持通信,监测主服务器的健康状态。图4.1主服务器正常服务4.2主服务器宕机,备份服务器接替主服务器的工作当nginx主服务器宕机或发生异常,总之以任何理由造成服务器上的健康监测程序发生异常,无法和从服务器上的健康监测程序通信,此时从服务器上的健康监测机制就会认为主服务器挂了,从而将vip绑定到自身,成功上位,充当主服务器的角色。图4.2.1主服务器宕机后验证:关闭主服务器(192.168.92.128)上的nginx:/usr/local/nginx/sbin/nginx-squit,之后在浏览器地址栏中输入vip:192.168.92.150图4.2.1切换到备用服务器(192.168.92.134)4.3“一山不容二虎”:主服务器恢复后,备份服务器主动让位在keepalive机制中,主服务器终究是主服务器,一旦主服务器恢复,边从新绑定vip,继续充当主服务器,而从服务器又成为了热备。图4.3主服务器恢复验证:重启主服务器(192.168.92.128)和主服务器的keepalived,再次输入192.168.92.150,主服务器恢复服务:图3.2.2配置成功
LoveIT 2020-02-13Nginx -
Nginx配置实例—动静分离
1、动静分离概念重温Nginx动静分离可以简单的理解为把动态跟静态分离开来,不能理解成只是单纯的把动态页面和静态页面物理上的分离。严格意义上来说应该是把动态请求和静态请求分离,即nginx处理静态页面,tomcat等应用服务器处理动态页面。动静分离从目前的实现角度来讲大致分为两类:一种是纯粹把静态文件放在一个独立的服务器上,有一个独立的域名,也是目前主流推崇的方案;另一种是动态文件和静态文件混在一起发布,通过nginx分离开来,通过location配置不同的后缀名实现不同的请求转发。2、Nginx动静分离实战配置2.1准备静态资源首先在Liunx系统根目录下新建一个文件夹/resources/static用于存放静态文件2.2准备动态资源在tomcat的webapps/ROOT目录下新建test.jsp,内容如下:2.3在nginx中配置对静态请求和动态请求的处理逻辑完成资源文件的准备后,启动两个tomcat,分别监听8080和8081,之后在nginx的配置文件做如下简单配置:配置好后重启nginx,然后在浏览器地址栏中输入www.123.com/nginx.png,能看到nginx的Logo图,说明对静态资源的配置没有问题;之后再输入www.123.com/test.jsp,能看到Randomnumber:xxx,说明对动态请求的配置也能正常工作,运行截图如下:图1nginx处理静态请求图2nginx处理动态请求整合动态资源和静态资源上面通过一个简单的小测试体验了一下nginx的动静分离的效果,测试结果达到了预期效果。接下来我们来把他们整合在一起,即在一个页面中即有动态的也有静态的资源,通过nginx中配置帮我们完成对资源的请求,而我们所需做的就是输入www.123.com这个地址即可。(1)在/rsources目录下新建目录template,并在template中新建文件:index.html,文件内容如下:保存文件之后修改nginx配置文件如下:配置好后重启nginx,然后在浏览器地址栏中输入www.123.com,如果在网页上能看到如下图所示内容表示配置成功,运行截图如下:图3动静资源正常加载
LoveIT 2020-02-12Nginx -
Nginx配置实例—负载均衡
1、Nginx负载均衡配置预期实现效果:在浏览器地址栏中输入:http://www.123.com,nginx收到请求后把请求平均分匹配到Linux服务器上监听8080和8081端口的两个tomcat服务器上。1.1准备工作(1)首先在host文件中配置域名映射:192.168.92.128www.123.com(2)准备两个tomcat服务器,分别监听8080和8081端口,并在各自目录下新建一个edu目录,并创建index.html测试页面,配置完成后启动,让两个tomcat跑起来。1.2nginx负载均衡配置在nginx的http模块下配置upstream模块,upstream的语法是:注:[]中的内容是可选的。简单配置如下:测试结果在浏览器地址栏中输入www.123.com/edu,结果和预期一样,nginx让两个tomcat轮询处理请求:负载均衡配置运行结果2、upstream模块详解upstream是Nginx中配置负载均衡的关键模块,基本语法:upstream有关的参数如下:server:用于配置反向服务地址和端口,语法:serveraddress[parameters];weight:权重,语法:weight=number,默认是1max_conns:语法:max_conns=number,用于限制到代理服务器的同时活动连接的最大数量,默认是0max_fail:语法:max_fails=number,允许请求失败的次数。经常和fail_timeout参数配合使用。fail_timeout:语法:fail_timeout=time,经过max_fails失败后,服务暂停的时间(默认10s)backup:预留的备份服务器(当其他的节点挂掉,备份服务器启动)down:当前的server暂时不参与负载均衡(不对外提供服务)slow_start:语法:slow_start=time,设置服务器不正常运行时,或者在一段时间后服务器变为不可用时,服务器将其权重从零恢复到指定值的时间。默认值为零,即禁用慢速启动。service:语法:service=name,启用DNSSRV记录的解析并设置服务名称。为了使此参数起作用,必须为服务器指定resolve参数,并指定不带端口号的主机名。resolve:监视与服务器域名相对应的IP地址的更改,并自动修改upstream配置,而无需重新启动nginx。配置示例:max_fail=3fail_timeout=100的含义是:当一台服务器在100s内如果出现了3次请求失败,就会报机器的状态设置为down,并且会在100s后尝试重新启用这个服务器。3、nginx负载均衡调度算法详解Nginx目前支持的调度策略有以下5种:(1)轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。#####(2)加权轮询指定轮询权重,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。#####(3)ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享的问题。应用场景:保持session一至性#####(4)url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。应用场景:静态资源缓存,节约存储,加快速度其中,hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。#####(5)fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
LoveIT 2020-02-11Nginx -
Nginx配置实例—反向代理
1、配置示例1::要求:在浏览器地址栏中输入www.123.com,跳转到Linux服务器中的tomcat主页面声明:本次实验在我电脑的Linux虚拟机上进行的,Linux系统信息如下:图1实验系统信息1.1准备工作(1)安装nginx(参考:Nginx快速入门—基本概念以及在Linux上安装Nginx(2)启动一个tomcat(注意:在启动之前一定要配置好Java环境变量,参考:记一次在云服务器上部署项目的实践经历)(3)tomcat启动后在本地host文件中配置域名映射:配置完成后在浏览器中输入www.123.com:8080如果能看到tomcat的页面,就说明配置的没有问题。图2host配置测试1.2nginx配置反向代理接下来我们来配置nginx,nginx一入门我们都知道在nginx的安装目录下的conf/nginx.conf是nginx的默认配置文件,因此打开它默认配置文件并简单配置如下内容(当然,你也可以使用nginx-c指定配置文件),简单配置如下:测试结果:配置完成后重新加载配置文件后,直接访问www.123.com,如果可以看到tomcat的首页那就大功告成啦!图2nginx反向代理配置示例1测试2、配置示例2::要求:在浏览器地址栏中输入www.123.com/login,请求跳转到127.0.0.1:8080在浏览器地址栏中输入www.123.com/user,请求跳转到127.0.0.1:80812.1准备工作启动两个tomcat,并在监听8080端口的tomcat的webapps目录下新建文件夹login以及文件index.html;在监听8081端口的tomcat的webapps目录下新建文件夹user以及文件index.html;2.2配置nginx按照要求,nginx服务器要根据不同的请求路径把不同的请求转发到不同的tomcat中处理,这里就需要用到正则表达式来匹配路径,具体的配置如下:测试结果:图3nginx反向代理配置示例2测试3、location匹配规则详解在上面的配置中使用到了正则匹配,nginx官方文档给出location语法如下:location语法:location[=|~|~*|^~]/uri/{…}其中,方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式。uri是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准的uri";也可以包含正则,这种模式被称为"正则uri",具体可用的标识符如下:**=**:必须与指定的模式严格匹配,如果匹配成功就停止向下搜索,并立即处理代理逻辑~:必须以指定模式开始,并且区分大小写~*:必须以指定模式开始,并且不区分大小写**^~**:前缀匹配,不支持正则,如果模式匹配,那么就停止搜索其他模式了。无:普通匹配(最长字符匹配);与location顺序无关,是按照匹配的长短来取匹配结果。若完全匹配,就停止匹配。备注:1、如果uri里面包含正则表达式,就必须使用~或~*标识符;2、针对~和~匹配标识符,可以在前面加上!来取反,如下:<spanstyle="color="rgb(192,0,0)">!~表示正则不匹配,区分大小写。<spanstyle="color="rgb(192,0,0)">!~表示正则不匹配,不区分大小写。3.1精确匹配(=)示例3.2区分大小写正则匹配(~)示例3.3不区分大小写正则匹配(~*)示例3.4标准匹配(^~)示例3.5普通匹配(最长字符匹配)示例4、location匹配优先级1、如果有精确匹配,会先进行精确匹配,匹配成功,立刻返回结果。2、普通匹配与顺序无关,因为按照匹配的长短来取匹配结果。3、正则匹配与顺序有关,因为是从上往下匹配。(首先匹配,就结束解析过程)。4、在location中,location/可以匹配所有的请求,但是他的优先级是最低的。总结匹配规则如下:<spanstyle="color="rgb(192,0,0)">*(location=)>(location完整路径)>(location^~路径)>(location~,~正则顺序)>(location部分起始路径)>(location/)即<spanstyle="color="rgb(192,0,0)">(精确匹配)>(最长字符串匹配,但完全匹配)>(非正则匹配)>(正则匹配)>(最长字符串匹配,不完全匹配)>(location通配)**
LoveIT 2020-02-10Nginx -
Nginx配置文件详解(配置文件结构)
Nginx配置文件结构在nginx的安装目录下的conf目录下有一个nginx.conf,这个就是nginx默认的配置文件,默认的内容如下:Nginx配置文件结构:1、main:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成workerprocess数等。可配置的参数如下:(1)user:来指定NginxWorker进程运行用户以及用户组,默认由nobody账号运行(2)worker_processes:指定了Nginx要开启的子进程数。每个Nginx进程平均耗费10M~12M内存。根据经验,一般指定1个进程就足够了。如果是多核CPU,建议指定和CPU的数量一样的进程数即可。(3)error_log:用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。(4)pid:用来指定进程id的存储文件位置。(5)worker_rlimit_nofile:用于指定一个nginx进程可以打开的最多文件描述符数目,这里是65535,需要使用命令“ulimit-n65535”来设置。配置示例:worker_processes1;error_loglogs/error.log;error_loglogs/error.lognotice;error_loglogs/error.loginfo;pidlogs/nginx.pid;2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。(1)use:用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中,对于Linux系统,epoll工作模式是首选。(2)worker_connections:用于定义Nginx每个进程的最大连接数,即接收前端的最大请求数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_clients=worker_processes*worker_connections,在作为反向代理时,Max_clients变为:Max_clients=worker_processes*worker_connections/4。进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit-n65536”后worker_connections的设置才能生效。配置示例:3、http块:可以嵌套多个server,http模块负责HTTP服务器相关属性的配置,有server和upstream两个子模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。(1)include:设定文件的mime类型,类型在配置文件目录下的mime.type文件定义,来告诉nginx来识别文件类型。(2)default_type:设定了默认的类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置asp的locate环境时,Nginx是不予解析的,此时,用浏览器访问asp文件就会出现下载了。(3)log_format:用于设置日志的格式,和记录哪些参数,这里设置为main,刚好用于access_log来纪录这种类型。配置示例:'$status$body_bytes_sent"$http_referer"''"$http_user_agent""$http_x_forwarded_for"';access_loglogs/access.logmain;sendfileon;tcp_nopushon;keepalive_timeout65;gzipon;4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。(1)listen:用于指定虚拟主机监听的服务端口。(2)server_name:用来指定IP地址或者域名,多个域名之间用空格分开。(3)root:表示在这整个server虚拟主机内,全部的rootweb根目录。注意要和locate{}下面定义的区分开来。(4)index:全局定义访问的默认首页地址。注意要和locate{}下面定义的区分开来。(5)charset:用于设置网页的默认编码格式。(6)access_log:用来指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式。配置示例:listen80;server_namelocalhost;root/Users/hk/www;indexindex.phpindex.htmlindex.htm;charsetutf-8;access_loglogs/host.access.logmain;aerror_loglogs/host.error.logmain;}5、location块:location模块负载均衡,反向代理,虚拟域名等配置。是来定位的,定位URL,解析URL,它也提供了强大的正则匹配功能,也支持条件判断匹配,可以通过location指令实现Nginx对动,静态网页进行过滤处理。(1)location/表示匹配访问根目录。(2)root:用于指定访问根目录时,虚拟主机的web目录,这个目录可以是相对路径(相对路径是相对于nginx的安装目录)。也可以是绝对路径。(3)proxy_pass:代理转发,如果在proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配的路径部分也给代理走。(4)proxy_set_header:允许重新定义或者添加发往后端服务器的请求头。(5)include:加载配置文件,后面介绍nginx多个配置文件时候会提到。(6)index:定义页面显示html,一般和alias配合使用。(7)root:定位localtion匹配的url资源路径。配置示例:roothtml;indexindex.htmlindex.htm;}6、upstream:模块负债负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。Nginx的负载均衡模块目前支持4种调度算法:(1)weight轮询(默认)。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响。weight指定轮询权值,weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下。(2)ip_hash。每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题。(3)fair。比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。(4)url_hash。按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx的hash软件包。在HTTPUpstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:down,表示当前的server暂时不参与负载均衡。backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream模块定义的错误。fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
LoveIT 2020-02-10Nginx -
Nginx快速入门—基本概念以及在Linux下安装
1、什么是Nginx?百度百科:Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。我的理解:Nginx(enginex)是一个高性能的HTTP反向代理服务器,特点是占用内存少,并发能力强,事实上nginx的并发能力确实是同类型网页服务器中中表现最好的。Nginx专门为性能优化而开发,性能是其最重要的考量,能经受住高并发的考验,有报告表明能支持高达50000个并发连接数。2、Nginx中重要的概念反向代理负载均衡动静分离2.1反向代理(1)正向代理 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。 简单说正向代理就是一个位于客户端和原始服务器(originserver)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。图2.1.1正向代理示意图(2)反向代理反向代理正好相反,对于客户端而言反向代理服务器就像是原始服务器(实质并不是),并且客户端不需要进行任何特别的设置。客户端向反向代理服务器(例如:Nginx)的命名空间(name-space)中的内容发送普通请求,接着反向代理服务器将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。图2.1.2反向代理示意图(3)正向代理和反向代理的区别从用途上来讲:**正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。**正向代理还可以使用缓冲特性减少网络使用率。**反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。**另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。 从安全性来讲:正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。反向代理服务器对外都是透明的,访问者并不知道自己访问的是一个代理服务器。2.2负载均衡单个服务器解决不了问题时,我们通过增加服务器的数量,然后将任务分发到各个的服务器上,将原先请求集中到一个服务器上改变为分发到多个服务器,这一过程就是负载均衡。图2.2.1负载均衡示意图2.3动静分离为了加快网站的解析速度,可以把静态资源和动态资源分开部署到不同的服务器上进行解析,以加快解析速度,降低了原先单个服务器解析的压力。图2.3.1动静分离示意图3、Linux上安装Nginx3.1安装Nginx所需依赖Nginx安装需要的依赖:pcre、openssl、zlib、和gcc,因此我们需要在安装nginx之前先安装所需的依赖,下面是一条一键安装上面四个依赖的命令:3.2安装Nginx依赖安装完毕后,我们可以到Nginx官网:http://nginx.org/download/找到合适的Nginx版本下载下来进行安装。图3.2.1解压成功进入到解压出来的文件夹中执行以下命令;安装成功后就会在/usr/local/nginx下生成Nginx的相关文件conf、html、logs、sbin,如图:图3.2.1Nginx目录结构目录结构说明:-conf:Nginx的配置文件夹,它里面有一个nginx.conf,这是配置Nginx的重要文件-sbin:Nginx命令的目录,如Nginx的启动命令nginx-logs:Nginx默认的日志路径,包括错误日志及访问日志-html:这是编译安装时Nginx的默认站点目录,类似Apache的默认站点htdocs目录3.3启动Nginx进入到sbin目录,目录下只有一个执行脚本nginx,执行命令./nginx,然后找到Linux虚拟机的ip直接访问,如果看到下面的画面,证明Nginx就安装成功了:图3.2.2安装成功注意:由于Nginx的配置文件中默认的端口是80,因此当没法访问的时候请先检查你的配置以及对应的端口是否在防火墙中是否是开放的。1.检查防火墙端口是否开放:firewall-cmd--list-all2.增加端口:sudofirewall-cmd--add-port=803.重启防火墙:firewall-cmd--reload
LoveIT 2020-02-09Nginx