当前位置: 首页 > Linux

nginx常用功能的秘密(有福利!!!)

时间:2023-04-07 01:31:44 Linux

本文旨在用最流行的语言讲述最枯燥的基础知识来吧,语法就不多说了,上面一大堆互联网。下面博主将对nginx的一些非常常用的功能进行描述和分析。学会了这些功能,普通的开发部署就不成问题了。所以,希望大家看完之后自己安装nginx来学习配置测试,才能真正掌握。前面高能,文末有福利。文章大纲:正向代理,反向代理,透明代理,负载均衡,静态服务器,nginx,安装,还有一点小福利有的读者还是不明白:什么是“正向”,什么是“代理”,先了解一下这两个条款分别。前向:方向相同或一致代理:委托或依赖他人做自己不能做或不打算做的事情。借助解释,回到nginx的概念,正向代理其实就是客户端不能主动或者不打算完成主动向某个服务器发起请求,而是委托nginx代理服务器发起一个请求向服务器请求,获取处理结果,返回给客户端。从下图可以看出:客户端向目标服务器发起的请求,由代理服务器向目标主机发起,得到结果后通过代理服务器返回给客户端。举个例子:广大社会主义接班人都知道,为了保护祖国的花朵免受外界雾霾的侵袭,国家对网络做了一些“优化”。如果没有谷歌等搜索引擎的帮助,即使是迷魂药代码也会失色。因此网上出现了一些范强技术和软件供有需要的人使用,比如某某VPN等,其实VPN的原理基本都是一样的。类似于正向代理,即需要访问外网的电脑发起访问外网的请求,使用本机上的VPN寻找可以访问国外网站的代理服务器,由代理服务器发起请求到国外网站,然后将结果返回给机器。正向代理配置:server{#指定DNS服务器解析器IP地址114.114.114.114;#指定代理端口listen8080;location/{#设置代理服务器的协议和地址(固定)proxy_passhttp://$http_host$request_uri;这样内网8080端口的服务器就可以主动向1.2.13.4的主机请求了,比如在Linux下:curl--proxyproxy_server:8080http://www.taobao.com/key的配置forwardproxy:resolver:DNS服务器IP地址listen:发起请求的内网服务器端口proxy_pass:代理服务器协议和地址2.Reverseproxyreverseproxy:反向代理,指使用代理服务器来接受客户端发送的请求,然后将请求转发给内网的上游服务器。上游服务器处理完成后,通过nginx将结果返回给客户端。以上介绍了正向代理的原理,相信对于反向代理来说,还是很容易理解的。反向代理是先通过nginx接受外界的请求,然后根据需要转发给内网的服务器,将处理后的请求返回给外部客户端。此时代理服务器对外就是一个web服务器,客户端根本不知道“上游服务器”的存在。例如:一台服务器只有一个80端口,服务器中可能有多个项目。如果项目A的端口是8081,项目B是8082,项目C是8083,假设指向服务器的域名是www.xxx。com,此时访问B项目是www.xxx.com:8082,以此类推。其他项目的url也需要加上端口号,非常难看。这个时候我们把80端口给nginx服务器,给每个项目分配一个独立的子域名,比如项目A是a.xxx.com,在nginx中设置了每个项目的转发配置,那么所有项目的访问都由nginx服务器接受,然后根据配置转发给不同的服务器处理。具体流程如下图所示:反向代理配置:server{#监听端口listen80;#服务器名,即客户端访问的域名地址server_namea.xxx.com;#nginx日志输出文件access_loglogs/nginx.access.logmain;#nginx错误日志输出文件error_loglogs/nginx.error.log;根HTML;indexindex.htmlindex.htmindex.php;location/{#代理服务器地址proxy_passhttp://localhost:8081;#修改发送给客户端的URL操作proxy_redirectoff;proxy_set_header主机$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_next_upstreamerrortimeoutinvalid_headerhttp_500http_502http_503http_proxy}}这样就可以通过a.xxx.com访问项目a对应的网站了,不用带难看的端口号。反向代理配置的要点是:server_name:表示客户端向服务器发起请求时输入的域名proxy_pass:表示源服务器的访问地址,即实际处理请求的服务器(localhost+端口号)。3、透明代理透明代理:也叫简单代理,意思是当客户端向服务器发起请求时,请求会先到达透明代理服务器,然后由代理服务器将请求转发给真实源服务器进行处理,即客户端不知道代理服务器的存在。举个栗子:它的用法有点类似于拦截器,比如一些规定比较严格的公司的办公电脑。无论我们用电脑做什么,安全部门都可以拦截我们发送给外界的任何东西。这是因为计算机在对外发送时,实际上是先经过网络上的一个透明服务器,经过它的处理后才出到互联网上。当我们上网时,我们根本察觉不到有拦截器在拦截我们的数据和信息。有人说透明代理有点像反向代理,代理服务器先接受请求,再转发给源服务器。其实本质上是有区别的。透明代理是指客户端感知不到代理服务器的存在,而反向代理是指客户端感知到的只有一台代理服务器。因此,其中一个隐藏了自己,另一个隐藏了源服务器。.其实透明代理和正向代理是类似的,都是由客户端发起,由代理服务器处理;它们的区别在于正向代理是代理服务器而不是客户端请求,而透明代理是客户端发起请求时,会先经过透明代理服务器,然后到达服务器。在此过程中,客户端无法感知到代理服务器。4、负载均衡负载均衡:将服务器收到的请求按照规则进行分配的过程称为负载均衡。负载均衡是反向代理的一种体现。可能大部分人接触到的web项目,一开始一台服务器都可以搞定,但是当网站访问量变大的时候,单台服务器就搞不定了。这时候就需要增加服务器的数量,让集群来分担流量压力,而在设置这些服务器的时候,nginx就起到接收流量和分流的作用。当请求到达nginx服务器时,nginx可以根据设置的负载信息将请求分发到不同的服务器。服务器处理完成后,nginx获取处理结果返回给客户端。这样就可以利用nginx的反向代理来实现负载均衡。nginx实现负载均衡有几种模式:Round-robin:每个请求按照时间顺序一一分配给不同的后端服务器,这也是nginx默认的模式。轮询方式的配置非常简单,只需要将服务器列表添加到upstream模块即可。下面的配置意思是:负载中有三台服务器,当请求到达时,nginx按照时间顺序将请求分配给三台服务器处理。上游服务器列表{服务器1.2.3.4;服务器1.2.3.5;server1.2.3.6;}ip_hash:每个请求根据访问IP的hash结果分配,同一个IP客户端定时访问一个后端服务器。可以保证同一个ip的请求发送到固定的机器上,可以解决session问题。下面的配置表示:负载中有三台服务器。当请求到来时,nginx会先根据ip_hash的结果进行分配,即同一个IP的请求固定在某台服务器上,其他请求按时间顺序分配给该服务器。三台服务器处理它。upstreamserverList{ip_hashserver1.2.3.4;服务器1.2.3.5;server1.2.3.6;}url_hash:根据访问的URL的hash结果进行请求分发,同一个URL固定转发到同一个后端服务器处理。上游服务器列表{服务器1.2.3.4;服务器1.2.3.5;服务器1.2.3.6;散列$request_uri;hash_methodcrc32;}fair:根据后端服务器的响应时间分配请求,响应时间短的优先。上游服务器列表{服务器1.2.3.4;服务器1.2.3.5;服务器1.2.3.6;fair;}每种模式下,每个服务器后面可以携带的参数有:down:当前服务器不参与负载weight:权重,值越大,服务器负载越大。max_fails:允许的请求失败次数,默认为1次。fail_timeout:max_fails次失败后暂停的时间。backup:备用机,只有当所有其他非备用机都宕机或忙时,才会请求备用机。例如,下面的配置表示负载中有三台服务器。当请求到达时,nginx按照时间和权重的先后顺序,将请求分配给三台服务器。比如有100个请求,服务器4处理了30%,处理了50%。20%的请求由服务器5处理,20%的请求由服务器6处理。上游服务器列表{服务器1.2.3.4权重=30;服务器1.2.3.5权重=50;server1.2.3.6weight=20;}下面的配置表示负载中有3台服务器,服务器4的故障超时时间为60s。服务器5暂时不参与负载,服务器6仅作为备机使用。upstreamserverList{server1.2.3.4fail_timeout=60s;服务器1.2.3.5宕机;server1.2.3.6backup;}下面是配置负载均衡的例子(只写了关键配置):其中:upstreamserverList为配置模块server_name为负载的域名地址proxy_pass为模块指向加载列表上游serverList{server1.2.3.4weight=30;服务器1.2.3.5宕机;服务器1.2.3.6备份;}服务器{听80;服务器名称www.xxx.com;根HTML;indexindex.htmlindex.htmindex.php;位置/{proxy_passhttp://serverList;proxy_redirect关闭;proxy_set_header主机$host;与后端服务器分离,单独部署。这样,前后端人员就可以各司其职,互不依赖。在前后端分离的情况下,前端项目的运行不需要使用Tomcat、Apache等服务器环境,所以可以直接使用nginx作为静态服务器。静态服务器的配置如下,关键配置为:root:直接静态项目的绝对路径的根目录。server_name:静态网站访问的域名地址。服务器{听80;服务器名称www.xxx.com;client_max_body_size1024M;位置/{root/var/www/xxx_static;索引index.html;只有对一个知识点做一个测试,才能留下深刻的印象。在此之前,我们需要知道如何安装nginx。下面以linux环境为例简单介绍下yum方式安装nginx的步骤:安装依赖://一键安装以上四个依赖yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel安装nginx:yuminstallnginx查看是否安装成功:nginx-vstart/startnginx:/etc/init.d/nginxstart/etc/init.dd/nginxstop编辑配置文件:/etc/nginx/nginx.conf这些步骤完成后,我们就可以进入nginx配置文件nginx.conf对以上知识点进行配置和测试了。一点好处:有人说好像什么都懂,但是没有linux去测试。其实nginx也有windows版的。当然windows版本在实际项目中用的不多,因为web项目的服务器都是linux的,所以你可以在电脑上装个虚拟机,然后装个linux玩玩,但是如果你想应用什么学习了,而且更贴近公司项目的生产环境,笔者推荐大家购买台云服务器学习,正好阿里云有双十一活动,一台服务器一年只要90元,这是一个明显的羊毛活动,你忍心放弃吗?你安装一个虚拟机和一个Linux系统所花的时间就是90多块钱!你有没有想过哪天自己把自己的代码上传到服务器?您是否曾梦想过拥有您自己建立和维护的个人博客?从项目发布到域名解析接入的全过程你试过吗?....如果你没有,建议你买一个:点我90元买一台服务器。如果链接打不开,请扫描二维码购买:------------标记点--------------注意!!!点击链接注册购买后,阿里云会给博主返现。为了感谢您的厚爱,博主决定将所有现金返还给您。所以新注册购买的用户,请加博主V(sisi-ceo)联系博主,博主审核通过后会以红包的形式返现,方便大家购买服务器以最低的价格了解更多!!!(老用户和点击其他链接注册购买的用户很大,博主是拿不到返现的,所以这部分博主无能为力~~~)觉得这篇文章对你有帮助吗?请分享给更多人关注《编程无界》,提升你的造作技能