Nginx R31 doc-10-NGINX Reverse Proxy 反向代理

配置 NGINX 作为反向代理

配置 NGINX 作为反向代理用于 HTTP 和其他协议,支持修改请求头和对响应进行细粒度的缓冲。

本文介绍了代理服务器的基本配置。您将学习如何将请求从 NGINX 转发到不同协议的代理服务器上,修改发送到代理服务器的客户端请求头,并配置来自代理服务器的响应的缓冲。

介绍

代理通常用于在多个服务器之间分发负载,无缝显示来自不同网站的内容,或者通过非 HTTP 协议将请求传递给应用服务器进行处理。

将请求传递给代理服务器

当 NGINX 代理请求时,它将请求发送到指定的代理服务器,获取响应,并将其发送回客户端。

可以通过指定的协议将请求代理到 HTTP 服务器(另一个 NGINX 服务器或任何其他服务器)或非 HTTP 服务器(可以运行使用特定框架开发的应用程序,如 PHP 或 Python)。支持的协议包括 FastCGI、uwsgi、SCGI 和 memcached。

要将请求传递到 HTTP 代理服务器,需要在 location 内部指定 proxy_pass 指令。例如:

location /some/path/ {
    proxy_pass http://www.example.com/link/;
}

此示例配置导致将此位置处理的所有请求传递到指定地址的代理服务器。

此地址可以指定为域名或 IP 地址。地址还可以包括端口:

location ~ \.php {
    proxy_pass http://127.0.0.1:8000;
}

请注意,在上面的第一个示例中,代理服务器的地址后面跟着一个 URI,/link/。如果 URI 与地址一起指定,则它替换了与位置参数匹配的请求 URI 部分。

例如,在这里,具有 /some/path/page.html URI 的请求将被代理到 http://www.example.com/link/page.html

如果地址没有指定 URI,或者无法确定要替换的 URI 部分,则传递完整的请求 URI(可能已修改)。

要将请求传递到非 HTTP 代理服务器,应使用适当的 **_pass 指令:

  • fastcgi_pass 将请求传递到 FastCGI 服务器
  • uwsgi_pass 将请求传递到 uwsgi 服务器
  • scgi_pass 将请求传递到 SCGI 服务器
  • memcached_pass 将请求传递到 memcached 服务器

请注意,在这些情况下,指定地址的规则可能不同。您可能还需要向服务器传递其他参数(有关更多详细信息,请参阅参考文档)。

proxy_pass 指令也可以指向一组命名的服务器。在这种情况下,请求将根据指定的方法分布在组中的服务器之间。

传递请求头

默认情况下,NGINX 在代理请求中重新定义两个头字段:“Host” 和 “Connection”,并且消除值为空字符串的头字段。 “Host” 设置为 $proxy_host 变量,而 “Connection” 设置为 close。

要更改这些设置以及修改其他头字段,使用 proxy_set_header 指令。此指令可以在位置或更高位置指定。也可以在特定服务器上下文或 http 块中指定。例如:

location /some/path/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://localhost:8000;
}

在此配置中,“Host” 字段设置为 $host 变量。

要防止某个头字段传递到代理服务器,请将其设置为空字符串,如下所示:

location /some/path/ {
    proxy_set_header Accept-Encoding "";
    proxy_pass http://localhost:8000;
}

配置缓冲区

默认情况下,NGINX 缓冲来自代理服务器的响应。响应存储在内部缓冲区中,直到整个响应接收完毕后才发送给客户端。缓冲有助于优化与慢速客户端的性能,如果响应是从 NGINX 同步传递到客户端,可能会浪费代理服务器的时间。

但是,当启用缓冲时,NGINX 允许代理服务器快速处理响应,同时 NGINX 将响应存储多长时间取决于客户端下载它们所需的时间。

负责启用和禁用缓冲的指令是 proxy_buffering。

默认情况下,它设置为 on,缓冲已启用。

proxy_buffers 指令控制为请求分配的缓冲区的大小和数量。来自代理服务器的响应的第一部分存储在单独的缓冲区中,其大小由 proxy_buffer_size 指令设置。此部分通常包含相对较小的响应头,可以比其他响应的缓冲区小。

在下面的示例中,增加了默认缓冲区的数量,并将响应的第一部分的缓冲区大小设为小于默认值:

location /some/path/ {
    proxy_buffers 16 4k;
    proxy_buffer_size 2k;
    proxy_pass http://localhost:8000;
}

如果禁用了缓冲,响应将在从代理服务器接收响应时同步发送给客户端。对于需要尽快开始接收响应的快速交互式客户端,可能希望这种行为。

要在特定位置禁用缓冲,请在位置中使用 proxy_buffering 指令并使用 off 参数,如下所示:

location /some/path/ {
    proxy_buffering off;
    proxy_pass http://localhost:8000;
}

在这种情况下,NGINX 仅使用由 proxy_buffer_size 配置的缓冲区来存储响应的当前部分。

选择出站 IP 地址

如果您的代理服务器具有多个网络接口,有时可能需要为连接到代理服务器或上游的特定源 IP 地址进行选择。

如果 NGINX 后面的代理服务器配置为接受来自特定 IP 网络或 IP 地址范围的连接,则此功能可能很有用。

指定 proxy_bind 指令和必要网络接口的 IP 地址:

location /app1/ {
    proxy_bind 127.0.0.1;
    proxy_pass http://example.com/app1/;
}

location /app2/ {
    proxy_bind 127.0.0.2;
    proxy_pass http://example.com/app2/;
}

也可以使用变量指定 IP 地址。例如,$server_addr 变量传递接受请求的网络接口的 IP 地址:

location /app3/ {
    proxy_bind $server_addr;
    proxy_pass http://example.com/app3/;
}

nginx 系列

Nginx-01-聊一聊 nginx

Nginx-01-Nginx 是什么

Nginx-02-为什么使用 Nginx

Nginx-02-Nginx Ubuntu 安装 + windows10 + WSL ubuntu 安装 nginx 实战笔记

Nginx-02-基本使用

Nginx-03-Nginx 项目架构

Nginx-04-Docker Nginx

Nginx-05-nginx 反向代理是什么?windows 下如何配置使用 nginx

Nginx-06-nginx 汇总入门介绍

Nginx R31 doc 官方文档-01-nginx 如何安装

Nginx R31 doc-02-nginx 基本功能

Nginx R31 doc-03-HTTP Load Balancing HTTP 负载均衡

Nginx R31 doc-04-HTTP Health Checks

Nginx R31 doc-05-Dynamic Configuration of Upstreams with the NGINX Plus API 使用 NGINX Plus API 动态配置上游服务器

Nginx R31 doc-06-Accepting the PROXY Protocol

Nginx R31 doc-07-内容缓存

Nginx R31 doc-08-Configuring NGINX and NGINX Plus as a Web Server 配置 NGINX 和 NGINX Plus 作为 Web 服务器

Nginx R31 doc-09-Serving Static Content 静态内容

Nginx R31 doc-10-NGINX Reverse Proxy 反向代理

Nginx R31 doc-11-Compression and Decompression 压缩与解压缩

Nginx R31 doc-12-NGINX SSL Termination 安全加密

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 访问限流

Nginx R31 doc-14-Dynamic Denylisting of IP Addresses 动态拒绝IP地址

Nginx R31 doc-15-Live Activity Monitoring 实时活动监控

Nginx R31 doc-16-logging 配置日志

Nginx R31 doc-17-debugging 调试

Nginx R31 doc-18-High Availability Support for NGINX Plus in On-Premises Deployments

Nginx 实战-01-nginx ubuntu 安装笔记

Nginx 实战-01-nginx windows 安装笔记

Nginx 实战-02-nginx proxy_pass 服务代理访问 使用笔记 ubuntu nodejs

Nginx 实战-03-nginx 负载均衡

Nginx 实战-04-nginx 不同的地址访问不同的服务

Nginx 实战-05-nginx 反向代理实现域名到指定的 ip

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

推荐阅读更多精彩内容