企业级实战,Nginx反向代理与负载均衡实战配置以及原理详解

知识要点:

正向代理反向代理基本概念

正向代理的基本指令操作

反向代理的基本操作指令

反向代理实战 ---负载均衡实战

正向代理反向代理简介

正向代理
首先我们来看一张图:

正向代理

这里就好比外面的的因特网像是一个巨大的资源库 ,那么资源就分布在因特网的各个节点上我们局域网的客户端要访问外面的资源,那么就需要经过 正向代理服务器 才能对各个资源进行访问
这里的局域网内的机器借助了代理服务器访问局域网外部的资源,这主要是为了增强局域网内部的网络安全性,使得外网的威胁因素影响不到内部的网络 这里的代理服务器起到了防火墙的作用 同时也可以对局域网内的访问进行必要 监控和管理 ,正向代理服务器不支持外部对内部网络的访问请求。
反向代理
反向代理

与正向代理相反
如果我们的局域网向Internet提供资源,让internet上的其他用户可以访问我们局域网内部资源,也可以设置一个代理服务器 ,他提供的服务就叫做反向代理 (Reverse proxy)服务。
归纳起来就是说:

  • 正向代理服务器用来让局域网客户机接入外网以访问外网资源
  • 反向代理服务器是让外网的用户接入局域网中的站点以访问网点中的资源
    在正向代理中我们是客户端 目的是访问外网资源
    在反向代理中我们是站点目的是把站点的资源发布出去让其他客户端能够访问。
    了解完概念之后我们来实际的了解一下如何配置 他的指令是如何

正向代理的基本操作指令

简介

指令名称 用途
resolver 指定 DNS ip地址 默认端口53
resolver_timeout 设置解析超时时间
proxy_pass 代理服务器的协议地址

首先我们来看一按下Nginx服务器的正向代理服务的相关配置指令和正向代理服务的使用
在工作中使用Nginx代理服务功能的情况相对较少,Nginx代理服务器本身也相对简单
涉及的主要指令不多

  • resolver
    该指令用于指定DNS服务器的IP地址。DNS服务器的主要工作是对域名的解析工作,将域名转变为对应的ip地址。该指令的语法为
server {
    resolver 8.8.8.8 valid =30s;
    #解读: 设置DNS服务器的IP;NDS的主要操作是做域名解析,将域名的映射为对应的IP地址
    #time 有些情况下 我们的数据包在一定的时间内不能被传递到目的地,
    #但是又不能让这个数据包无线的存在,于是我们可以设定一个时间 ,
    #当数据包在这段时间内没有到达目的地就会被丢弃 然后发送者会受到一个消息 
    #并且决定要不要重新发送该数据包

    listen       80;
    server_name  localhost;
}
#一般情况下我们只用设置ip即可
#注意:
#在1.1.7开始 支持使用多个IP 从1.3.1开发版和1.2.2稳定版开始支持ipv6协议
  • resolver_timeout 指令
    该指令用于设置DNS服务器解析超时时间
server {
        resolver 8.8.8.8 valid =30s;
    
        resolver_timeout 100s;
        #设置DNS服务器的解析超时时间
        listen       80;
        server_name  localhost;

        #charset koi8-r;
  • proxy_pass指令
    该指令用于代理服务器的协议的地址,他不仅仅nginx的代理服务更用于 nginx的反向代理服务 (在反向代理中会有详细的讲解)
    proxy_pass URL ;
    URL指的是 设置带代理的服务器协议和地址
    在配置中比较固定一般是 :
server {
        resolver 8.8.8.8 valid =30s;
    
        resolver_time 100s;
        #设置DNS服务器的解析超时时间
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass   http://$http_host$request_uri;

        }

其中代理服务器协议设置为Http,http_host和request两个变量是Nginx支持的动态获取主机和uri的变量 。设置代理服务器时一般不要改变这个配置
详细的在反向代理中会做详细的讲解

反向代理基本操作指令

重点 :工作中用到的最多的一种方式
nginx服务气得反向代理是我们工作中最常用到的,也是用到最多的功能之一,涉及到的指令也是比较多的,各类的指令以及功能也不尽相同 (讲的时候不要分心去回答问题一次讲完 不然会窜讲)
nginx服务器的反向代理也是比较高效的.
首先我们来学习需要掌握的基本指令
基本指令一共21个 在这里只和大家介绍重点的。

  • proxy_pass
    设置被代理的服务器地址
upstream appserver{
    #如果是一组服务器的话这样配置 建议这样配置以后你加的话 也比较好加
    server http:127.0.0.1:8080 weight=1;
    server http:127.0.0.1:8081 weight=1;
    
    # 1-2  ip_hash;   服务器 不会太大 
    # 3-5  session复制;  配置比较麻烦一点
    # 5以上 redis共享   直接代码层次
    ip_hash;
}

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  logs/host.access.log  main;

    location /server {
        # 跳转的地址  被代理的服务器地址 
        # 如果在服务器内部指明了http://那么这里写这个http是也是可以的
        proxy_pass   http://yunxiserver;
    }
}
#使用还要注意URL中是否包含URI 如果有的话那么处理方式就不一样了 
#具体的如下:
 server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location /server {
            proxy_pass   http://yunxiserver;
        }

如果由我们的客户端发起请求 127.0.0.1:8080/server那么该请求将会被配置 中显示的location块进行处理,由于Proxy_pass指令中URL不含有uri所以会转向到127.0.0.1/server
下面我们来看看这个:

server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location /server {
            proxy_pass   http://yunxiserver/Text.jsp;
#注意后面加'/'和不加'/'的区别很大 加了就代表你配置了uri 千万记住
        }

在这个配置中我们配置了uri /Text.jsp 如果客户端任然发起127.0.0.1:8080/server请求 那么nginx服务器会将其跳转到127.0.0.1:8080/Text.jsp

server {
        listen       80;
        server_name  localhost;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
        # 1 
    proxy_pass   http://yunxiserver;
        # 2
        proxy_pass   http://yunxiserver/;
        }

在这个案例中我们location使用"/"来作为url变量的值匹配不包含uri的请求URL由于请求中不包含uri那么配置1和2效果是一样的
总结:
如果location匹配有参数的话,我们不想让他改变uri那么我们就不要配置URL的变量中的uri;

  • proxy_hide_header指令
    该设置用于设置nginx服务器在发送Http响应是隐藏一些头域信息
proxy_hide_header field;
中间 field 为需要发送的头域 该指令可以在 http server location块中进行配置 
  • Proxy_pass_header指令
    默认的情况下 ,nginx服务器发送响应报文时 ,报文头中不包含"Date" "Serer" "X-Accel" 等来自被代理的服务器的头域信息 那么如果我们想要想要设置哪些头域信息被发送语法如下
Proxy_pass_header field;
#field 指的是哪些文件将被发送
  • proxy_pass_request_body 指令
    该指令用于配置是否将客户端的请求体发送给代理服务器,其语法结构为:
proxy_pass_request_body  on|off;
#默认为on 开关可以在 http块 server 或者 location 块中进行配置
  • proxy_pass_request_headers指令
    该指令用于配置是否将客户端的请求头发送给代理服务器,其语法结构为:
proxy_pass_request_headers  on|off;
#默认为on 开关可以在 http块 server 或者 location 块中进行配置
  • proxy_set_header指令
    该指令可以更改nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发给被代理的服务器,
    其语法结构为 :
proxy_set_header field value;
#field 你要更改的信息所在的头域
#value 更该的值,支持文本,变量或者说变量的结合

默认情况下的配置
proxy_set_header host $proxy_host;

实例:
将目前host的值充填成客户端的地址值
proxy_set_header host $http_host;
将location块的server_name的指令充填到Host头域
proxy_set_header host $host;
  • proxy_set_body指令
    该指令可以更改nginx服务器收到的客户端请求的请求体信息,然后讲新的请求体发送给被代理的服务器
    语法结构:
proxy_set_body value;
value是更改的信息,支持文本变量或者变量的组合
  • proxy_bind指令
    官方解释是说他是强行将代理主机绑定到指定的ip地址
    简单点就是: 在配置了多个ip主机的情况下,如果我们希望代理连接由指定的主机处理,那就用它吧!
proxy_bind ip;
#ip 指的是主机ip
只有0.8.22nginx以上支持
  • proxy_coonext_timeout指令
    该指令配置nginx服务器与后端被代理的服务器尝试建立连接的超时时间,其语法结构为:
proxy_connect_timeout time;
#Time为超时时间默认60s
  • proxy_read_timeout指令
    该指令表示nginx服务器向后端被代理服务器发出read请求后等待响应超时时间
proxy_read_timeout  time;
#Time为超时时间默认60s
  • proxy_send_timeout指令
    该指令表示nginx服务器向后端发起write请求后等待响应的超时时间
proxy_send_timeout time;
#Time为超时时间默认60s
  • proxy_http_version指令
    该指令表示设置http协议版本
proxy_http_version  1.0|1.1;
版本自己选择 1.0或者1.1稳定一点
  • proxy_method指令
    该指令用于设置nginx服务器请求被代理服务器时使用的请求方法,一般为post 或者get
    如果设置了该方法那么客户端的请求将会被忽略
proxy_method post|get; 
注意自己选择get还是post 不要加 "" 号

注意自己选择get还是post 不要加 "" 号

  • proxy_ignore_client_abort指令
    该指令用于设置客户端中断网络请求,nginx服务器是否中断被代理的服务器请求
proxy_ignore_client_abort off|on
 默认off ; 极少使用 数据交互
  • proxy_ignore_headers指令
    该指令我们常用于设置一些http的响应头区域 nginx服务器接收到被代理的服务器响应时不会被处理设置的头域
proxy_ignore_headers field ...
field 未设置的http响应头的区域,例如"x-accel-REdirect","x-Accel-Expires"
等

对头域的处理
至此,有关nginx反向代理相关的重要配置已经编写好分享给大家了,后续了解有关更深入的nginx知识点,请关注!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容