全面了解 Nginx 主要应用场景

前言

本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流

Nginx能做什么

  1. 反向代理
  2. 负载均衡
  3. HTTP服务器(包含动静分离)
  4. 正向代理

以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做

反向代理

反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。下面贴上一段简单的实现反向代理的代码

server {  
        listen       80;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;

        location / {
            proxy_pass http://localhost:8080;
            proxy_set_header Host $host:$server_port;
        }
    }

保存配置文件后启动Nginx,这样当我们访问localhost的时候,就相当于访问localhost:8080了

负载均衡

负载均衡也是Nginx常用的一个功能,负载均衡其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

简单而言就是当有2台或以上服务器时,根据规则随机的将请求分发到指定的服务器上处理,负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。而Nginx目前支持自带3种负载均衡策略,还有2种常用的第三方策略。

1、RR(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

简单配置

upstream test {
        server localhost:8080;
        server localhost:8081;
    }
    server {
        listen       81;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;

        location / {
            proxy_pass http://test;
            proxy_set_header Host $host:$server_port;
        }
    }

负载均衡的核心代码为

 upstream test {
        server localhost:8080;
        server localhost:8081;
    }

这里我配置了2台服务器,当然实际上是一台,只是端口不一样而已,而8081的服务器是不存在的,也就是说访问不到,但是我们访问http://localhost 的时候,也不会有问题,会默认跳转到http://localhost:8080

具体是因为Nginx会自动判断服务器的状态,如果服务器处于不能访问(服务器挂了),就不会跳转到这台服务器,所以也避免了一台服务器挂了影响使用的情况,由于Nginx默认是RR策略,所以我们不需要其他更多的设置。

2、权重

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如

    upstream test {
        server localhost:8080 weight=9;
        server localhost:8081 weight=1;
    }

那么10次一般只会有1次会访问到8081,而有9次会访问到8080

3、ip_hash

上面的2种方式都有一个问题,那就是下一个请求来的时候请求可能分发到另外一个服务器,当我们的程序不是无状态的时候(采用了session保存数据),这时候就有一个很大的很问题了,比如把登录信息保存到了session中,那么跳转到另外一台服务器的时候就需要重新登录了,所以很多时候我们需要一个客户只访问一个服务器,那么就需要用iphash了,iphash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    upstream test {
        ip_hash;
        server localhost:8080;
        server localhost:8081;
    }

4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream backend { 
        fair; 
        server localhost:8080;
        server localhost:8081;
    }

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

   upstream backend { 
        hash $request_uri; 
        hash_method crc32; 
        server localhost:8080;
        server localhost:8081;
    } 

以上5种负载均衡各自适用不同情况下使用,所以可以根据实际情况选择使用哪种策略模式,不过fair和url_hash需要安装第三方模块才能使用,由于本文主要介绍Nginx能做的事情,所以Nginx安装第三方模块不会再本文介绍

HTTP服务器

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以使用Nginx来做服务器,同时现在也很流行动静分离,就可以通过Nginx来实现,首先看看Nginx做静态资源服务器

    server {
        listen       80;                                                         
        server_name  localhost;                                               
        client_max_body_size 1024M;


        location / {
               root   e:\wwwroot;
               index  index.html;
           }
    }

这样如果访问http://localhost 就会默认访问到E盘wwwroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。

动静分离

动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路

upstream test{  
       server localhost:8080;  
       server localhost:8081;  
    }   

    server {  
        listen       80;  
        server_name  localhost;  

        location / {  
            root   e:\wwwroot;  
            index  index.html;  
        }  

        # 所有静态请求都由nginx处理,存放目录为html  
        location ~ \.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {  
            root    e:\wwwroot;  
        }  

        # 所有动态请求都转发给tomcat处理  
        location ~ \.(jsp|do)$ {  
            proxy_pass  http://test;  
        }  

        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   e:\wwwroot;  
        }  
    } 

这样我们就可以吧HTML以及图片和css以及js放到wwwroot目录下,而tomcat只负责处理jsp和请求,例如当我们后缀为gif的时候,Nginx默认会从wwwroot获取到当前请求的动态图文件返回,当然这里的静态文件跟Nginx是同一台服务器,我们也可以在另外一台服务器,然后通过反向代理和负载均衡配置过去就好了,只要搞清楚了最基本的流程,很多配置就很简单了,另外localtion后面其实是一个正则表达式,所以非常灵活

正向代理

正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

当你需要把你的服务器作为代理服务器的时候,可以用Nginx来实现正向代理,但是目前Nginx有一个问题,那么就是不支持HTTPS,虽然我百度到过配置HTTPS的正向代理,但是到最后发现还是代理不了,当然可能是我配置的不对,所以也希望有知道正确方法的同志们留言说明一下。

   resolver 114.114.114.114 8.8.8.8;
    server {

        resolver_timeout 5s;

        listen 81;

        access_log  e:\wwwroot\proxy.access.log;
        error_log   e:\wwwroot\proxy.error.log;

        location / {
            proxy_pass http://$host$request_uri;
        

resolver是配置正向代理的DNS服务器,listen 是正向代理的端口,配置好了就可以在ie上面或者其他代理插件上面使用服务器ip+端口号进行代理了。

最后说两句

Nginx是支持热启动的,也就是说当我们修改配置文件后,不用关闭Nginx,就可以实现让配置生效,当然我并不知道多少人知道这个,反正我一开始并不知道,导致经常杀死了Nginx线程再来启动…..Nginx重新读取配置的命令是

nginx -s reload  

windows下面就是

nginx.exe -s reload

来源:https://raye.wang/

Image placeholder
IT头条
未设置
  56人点赞

没有讨论,发表一下自己的看法吧

推荐文章
人社部大数据应用场景思考

文/涵诚人社部尹蔚民部长在2017年5月全国“互联网+人社”座谈会指出,要充分运用大数据手段,通过“互联网+人社”,实现决策科学、管理精准化、服务人本化,人社的统计数据对于服务决策、研究政策、支撑事业

html5不常用标签应用场景

divpspanuldlollidtddstrongb现在都已经是9102年了,html5已经相当成熟标准了,为什么在布局的时候不用写html5提供的具有语义化的标签进行布局呢?我个人觉得是因为我们刚

Nginx 之父被抓:Rambler集团声称他工作时间开发了NGINX,要求全部代码所有权

俄罗斯搜索引擎Rambler.ru声称拥有NGINX代码的全部所有权。俄罗斯警方近日突击搜查了F5Networks子公司NGINX的莫斯科办事处,NGINX公司开发了互联网上最受欢迎的Web服务器

Golang语言的主要特性与发展的环境和影响因素

1.2.1影响Go语言发展的早期编程语言 正如“21世纪的C语言”这句话所说,Go语言并不是凭空而造的,而是和C++、Java和C#一样属于C系。不仅如此,设计者们还汲取了其它编程语言的精粹部分融入

滴滴大数据在汽车金融风控场景中的应用

桔妹导读:滴滴独有的出行场景大数据在金融领域有着非常广泛的应用前景,未来可与银行,保险,支付和理财等机构深入合作,帮助传统金融机构提升资源配置效率,降低获客和风险管理成本。出行场景大数据在交易欺诈识别

如何构建“小数据”驱动的泛场景智能应用体系?

张真百信银行首席技术架构师&AILab负责人目前负责基于自然语言的动态银行研究与落地,关注AI技术与金融,办公,生活场景的深度融入;开源软件UAVStack创始人,面向智能运维提供解决方案,AIOps

盘点 | 物联网未来的9大主要安全挑战

物联网(IoT)是数字转型时代最热门的技术之一,其能够将一切都连接到互联网。它是智能家居、自动驾驶汽车、智能电表和智能城市背后的核心技术。但是物联网(IoT)的未来将面临九个主要的安全挑战。在过去的几

医疗行业数据安全的主要风险和应对分析

作者:柳遵梁依据Verizon数据泄露报告中对客观现状、数据分布和数据流动等方面综合分析,医疗行业数据安全的主要风险包括如下几个方面:  一、人的安全风险和对策  1.人的安全风险是医疗数据安全的最大

vue和react的主要区别是什么?

Vue是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue采用自底向上增量开发的设计,其核心库只关注视图层,并且非常容易学习,也易与其它库或已有项目整合。另一方面,Vue完全有能力驱动采用

GoldenDB ,一个已经全面支撑银行核心系统的国产数据库

摘要:沿用、并存还是替代,一直是银行核心系统数据库转型重点思考的问题。四大行目前主要采用的是沿用与并存的数据库产品战略,在确保稳定的大前提下对新兴数据库技术进行探索研究和实践。相对而言,股份制银行在这

阿里云为什么有底气喊出“全面上云的拐点到了”?

摘要:拐点,又称反曲点,在高等数学里,拐点指的是凹凸性变化的点,在生活中借指趋势发生变化的点。(例如:经济运行出现回升拐点)虽然上云是大势所趋,但企业全面上云可能还需要一些时日,这或许是绝大部分从业者

全面集成阿里云,Salesforce在中国正式转正

进入2019年,SaaS竞争已进入深水区,当很多CRM厂商还在庆幸Salesforce在中国没有准入资格时,Salesforce已经在悄然布局,曲线入市。7月25日,在阿里云峰会·上海站上,全球最大C

Twitter 宣布抛弃 Mesos,全面转向 Kubernetes

作者|阿里云智能高级技术专家张磊划重点Twitter的基础设施从Mesos全面转向Kubernetes阿里云容器平台团队即将开源 Kubernetes高级作业管理集合美国西部时间5月2日下午7点,Tw

PostgreSQL 12 正式发布:全面的性能提升

PostgreSQL12已经发布,该版本在各方面都得到了加强,包括显著地提升查询性能,特别是对大数据集,总的空间利用率方面。这个版本为应用程序开发人员提供了更多的功能,比如对SQL/JSON路径表达式

重回榜首!Facebook开源加强版BERT,全面超越XLNet

大数据文摘出品作者:宁静刚刚被拉下神坛的BERT又一次称霸了GLUE、SQuAD和RACE三个排行榜。今年六月,谷歌发布XLNet,指出并解决了BERT的缺点,在20多个指标上全面刷爆了BERT之前的

商务办公的理想之选,联想ThinkPad L490全面评测

对于职场精英们来说,一台稳定耐用、功能强大的商务本可谓是工作中的必须品,在高端商务本市场中的代表品牌当属ThinkPad,ThinkPad的很多条产品线都可称得上商务本市场中的标杆级产品!不过Thin

拐点已至,阿里云进入All in Cloud全面上云时代!

当新旧设备交替势不可挡,当云的基础设施开始超过传统的数据中心,一个新时代开始了。在这样的时代里,以数据、计算、智能为主要特征的新一代信息技术,开始成为企业数字化转型的核心动力。对于所有云服务商来说,就

DTCC2019数据库技术评选结果全面揭晓,四大类别奖项新鲜出炉!

数据风云,十年变迁,而DTCC是一切变革的见证者。作为数据库领域顶尖级的盛会,DTCC已经成功举办了九届,今年是第十届。继承往届会议规模大、涉及话题更前沿、演讲内容更深入等特点之外,DTCC2019数

等保2.0全面实施 新华三支招如何构建新形势下的态势感知

近年来态势感知的热度非常高,不少安全厂商也纷纷推出了态势感知(平台)。在今年五月份,我国正式推出了等保2.0,并已于12月1日正式实施。在等保2.0的安全框架中也明确提出了要具备态势感知的能力,要

阿里云正式推出内容平台“云栖号”:全面助力企业和个人上云决策

1月7日,阿里云官网正式推出“云栖号”(https://yqh.aliyun.com/ ),旨在为大家提供第一手的上云资讯,云产品快速入门,来自不同行业精选的企业上云案例,基于众多成功案例萃取而成的最

最新 React Router 全面整理

Reactrouter已经到了V5版本,增加了基于ReactHooks的一些API,比如useParams、useHistory等等,让我们可以在组件中不接受routeprops就可以拿到路由信息{m

你了解Spring Data JPA的批量插入吗?

实现场景 有关拼团旅游的业务,里面有这样一个逻辑实现:一个拼团活动表Activity对应多个Travel旅游表,travel旅游表要分段存储前端传来的List,Travel表需将每一条数据保存入库,

了解 MongoDB 看这一篇就够了

作者:美码师一、简介MongoDB是一款流行的开源文档型数据库,从它的命名来看,确实是有一定野心的。MongoDB的原名一开始来自于英文单词”Humongous”,中文含义是指”庞大”,即命名者的意图

阿里提出针对多目标优化的全新算法框架,同时提升电商推荐场景 GMV 和 CTR

在推荐系统中,多目标优化一直是热门话题,阿里巴巴的XiaoLin、HongjieChen等人针对推荐中的多目标优化问题提出了一种基于帕累托效率的优化算法框架,并应用在电商推荐场景中,对GMV和CTR

高并发业务场景下的秒杀解决方案 (初探)

文章简介 本文内容是对并发业务场景出现超卖情况而写的一片解决方案。主要是利用到了Redis中的队列技术。 超卖介绍 所谓的超卖,就是我们的售卖量大于了物品的库存量。该情况一般出现在电商系统中促销类的业

{