NGINX 反向代理
代理与反向代理假设网络上有三台机器:
通常,你会直接访问需要的网络资源,此时路径是由你的电脑直接到网站 X->Z。 代理(Proxy)但某些情况下,X 并不能直接访问到 Z。原因可能是两方面的,
此时 Y 在中间可充当 X 的代理,将 X 的请求转发到 Z,拿到内容后再返回给 X。此时路径为 X->Y->Z。 也就是说,代理是 X 端主动配置和发起的,X 明确知道 Y 并不是返回内容的服务器。 反向代理 (Reverse Proxy)某些情况下,Z 不想让 X 直接访问,所以配置一个 Y 在前面充当代理提供服务。 此时,作为用户访问的是 Y,并不知道 Z 才是真正提供服务的机器,用户被代理了,相比前面,所以这里是 反向代理。 反向代理下,Z 在后台对外不公开只内网可访问,而作为反向代理的 Y 对外公开可通过公网访问。 反向代理的场景:
NGINX 中反向代理的配置请求转发通过 location /some/path/ {
proxy_pass http://www.example.com/link/;
} 目标地址中的 path 部分会替换掉 其中目标地址可以是 IP,或带端口, location ~ \.php {
proxy_pass http://127.0.0.1:8000;
} 除了转发到 HTTP 服务器,还支持其他类型协议的转发,相应的指令为:
请求头的转发默认情况下 NGINX 为代理的请求设置上了两个请求头, location /some/path/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://localhost:8000;
} 代理时如果想禁止某个头部的传递,直接将其设置为空即可, location /some/path/ {
proxy_set_header Accept-Encoding "";
proxy_pass http://localhost:8000;
} Buffer 的设置作为代理,在拿到完整响应前将结果暂存在内部的 buffer 数据中,拿到完整响应后再将结果返回到客户端。这种将响应暂存的方式可提高代理的效率,而同步的方式会浪费代理服务器的资源。 默认 buffer 模式为开启状态,可通过
location /some/path/ {
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8000;
} 关闭某些 location 下的 buffer 设置: location /some/path/ {
proxy_buffering off;
proxy_pass http://localhost:8000;
} 出口地址通过 location /app1/ {
proxy_bind 127.0.0.1;
proxy_pass http://example.com/app1/;
}
IP 地址也可指定为变量,比如 location /app3/ {
proxy_bind $server_addr;
proxy_pass http://example.com/app3/;
} 相关资源 |