Nginx配置入门(四):用HTTP代理模块配置反向代理服务器

用HTTP proxy module配置一个反向代理服务器

反向代理方式是指用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个Web服务器。
Nginx具有强悍的高并发高负载能力,因此一般会作为前端的服务器直接向客户端提供静态文件服务。但也有一些复杂多变的业务需要由上游服务器处理。因此,Nginx通常会被配置为既是静态Web服务器也是反向代理服务器。


作为静态Web服务器与反向代理服务器的Nginx

与Squid等其他反向代理服务器相比,Nginx有自己的特点。当客户端发来HTTP请求时,Nginx并不会立刻转发到上游服务器,而是先把用户的请求完整地接收到Nginx所在服务器的硬盘或者内存中,然后再向上游服务器发起连接,把缓存的客户端请求转发到上游服务器。
Nginx的这种方式,很明显的缺点就是延长了一个请求的处理时间,并增加了用于缓存请求内容的内存和磁盘空间;而优点则是降低了上游服务器的负载,尽量把压力放在Nginx服务器上。
通常,客户端与代理服务器之间的网络环境比较复杂,多半是走公网。而代理服务器与上游服务器之间一般是走内网。Nginx在接收到完整的客户端请求之后才会与上游服务器建立连接进行请求转发,由于网络较快,所以这个转发过程会执行得很快。这样,一个客户端请求占用上游服务器的连接时间就会明显缩短。

1 负载均衡的基本配置

(1) upstream块
语法:upstream name {...}
配置块:http

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com
}
server {
  location / {
    proxy_pass  http://backend;
  }
}

(2) server 块
语法:server name [parameters];
配置块:upstream

支持的参数parameters如下:

  • weight=number,权重,默认为1;
  • max_fails=number,与fail_timeout配合使用,指在fail_timeout时间段内,如果向当前的上游服务器转发次数超过number,则认为在当前fail_timeout时间段内这台上游服务器不可也用。默认为1,如果设置为0,则表示不检查失败次数;
  • fail_timeout=time,默认10;
  • down,表示所在的上游服务器永久下线,只有在ip_hash配置时才有用;
  • backup,使用ip_hash配置项时无效。它表示所在的上游服务器只是备份服务器,只有在所有的非备份上游服务器都失效后,才会向所在的上游服务器转发请求。

(3) ip_hash块
语法:ip_hash;
配置块:upstream
某些场景下,我们可能会希望来自某一个用户的请求始终落到固定的一台上游服务器中。ip_hash首先根据客户端的ip地址计算出一个key,将key按照upstream集群里的上游服务器数量进行取模,然后以取模后的结果把请求转发到相应的上游服务器中。
ip_hash与weight配置不可同时使用。如果upstream集群中有一台上游服务器暂时不可用,不能直接删除该配置,而是要down参数标识,确保转发策略的一惯性。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com down;
    server backend3.example.com
}

2 反向代理的基本配置

(1) proxy_pass
语法:proxy_pass URL;
配置块:location、if
URL可以使主机名或ip地址加端口的形式,也可以是UNIX句柄,还可以直接用负载均衡块。
默认情况下,反向代理是不会转发请求中的头部的,如果需要转发,必须加上配置:
proxy_set_heaer Host $Host;

(2) proxy_method
语法:proxy_method method;
配置块:http、server、location
用于改变请求方法类型。例如 proxy_method POST; 客户端发来的GET请求在转发时方法名会改为POST。

(3) proxy_hide_header
语法:proxy_hide_header the_header;
配置块:http、server、location

(4) proxy_pass_header
语法:proxy_pass_header the_header;
配置块:http、server、location

(5) proxy_pass_request_body
语法:proxy_pass_request_body on | off;
默认:proxy_pass_request_body on;
配置块:http、server、location

(6) proxy_pass_request_headers
语法:proxy_pass_request_headers on | off;
默认:proxy_pass_request_headers on;
配置块:http、server、location

(7) proxy_redirect
语法:proxy_redirect [default|off|redirect replacement];
默认:proxy_redirect default;
配置块:http、server、location
此配置项的作用是:当上游服务器返回的响应是重定向或刷新请求,该配置可以重设HTTP返回头部中的location或refresh字段。

(8) proxy_next_stream
语法:proxy_next_stream [error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off];
默认:proxy_next_stream error timeout;
配置块:http、server、location
此配置项表示当向一台上游服务器转发请求出现错误时,继续换一台上游服务器处理这个请求。proxy_next_stream 参数的作用是用来说明在哪些情况下回继续选择下一台上游服务器转发请求。

  • error:当向上游服务器发起连接、发送请求、读取响应时出错
  • timeout:发送请求或读取响应时发生超时
  • invalid_header:上游服务器发送的响应时不合法的
  • http_50x:上游服务器返回的HTTP响应码是50x
  • off:关闭proxy_next_stream功能
    Nginx的反向代理模块还提供了很多种配置,如设置连接的超时时间、临时文件如何存储,以及最重要的如何缓存上游服务器响应等功能。这些配置可以通过阅读ngx_http_proxy_module模块的说明来了解。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容