反向代理

反向代理

反向代理(Reverse Proxy)是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

指令介绍

proxy_pass

设置连接被代理服务器的协议、IP 地址或套接字,也可以是域名或 upstream 定义的服务器组。

Syntax:proxy_pass URL;
Default:—
Context:location, , if in locationlimit_except

proxy_hide_header

指定被代理服务器响应数据中不向客户端传递的 HTTP 头字段名称。

Syntax:proxy_hide_header field;
Default:—
Context:http, server, location

proxy_http_version

设置用于代理的 HTTP 协议版本,若使用 keepalive 或 NTLM 认证,建议指令值设置为 1.1。

Syntax:proxy_http_version 1.0 | 1.1;
Default:proxy_http_version 1.0;
Context:http, server, location

proxy_redirect

替换被代理服务器返回的响应头中属性字段 location 或 Refresh 的值,并返回给客户端。指令值为 default 时,使用 proxy_pass 指令值的内容进行替换。

Syntax:proxy_redirect default;
       proxy_redirect off;
       proxy_redirect redirect replacement;
Default:proxy_redirect default;
Context:http, server, location

proxy_pass_header

默认配置下 Njet 不会将头属性字段 Status 和 X-Accel-… 传递给客户端,可通过该指令开放传递。

Syntax:proxy_pass_header field;
Default:—
Context:http, server, location

proxy_set_header

在转发给被代理服务器前,修改或添加客户端的请求头属性字段

Syntax:proxy_set_header field value;
Default:proxy_set_header Host $proxy_host;
        proxy_set_header Connection close;
Context:http, server, location

proxy_socket_keepalive

设置 Njet 与被代理服务器的 TCP keepalive 行为的心跳检测机制,默认使用操作系统的 socket 配置。若指令值为 on,则开启 SO_KEEPALIVE 选项进行心跳检测

Syntax:proxy_socket_keepalive on | off;
Default:proxy_socket_keepalive off;
Context:http, server, location

配置示例

upstream backend1{
        zone upstream_backend1 64k;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }
upstream backend2{
        zone upstream_backend2 64k;
        server 127.0.0.1:8003;
    }
    
    server{
        location /njet {
           proxy_http_version 1.1;
           proxy_pass http://http1;
           proxy_hide_header Vary;
           proxy_pass_header server;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_redirect http://http1 http://http2;
           proxy_socket_keepalive on;
        }
    }