代理与反向代理假设网络上有三台机器:
通常,你会直接访问需要的网络资源,此时路径是由你的电脑直接到网站 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/; } location /app2/ { proxy_bind 127.0.0.2; proxy_pass http://example.com/app2/; } IP 地址也可指定为变量,比如 location /app3/ { proxy_bind $server_addr; proxy_pass http://example.com/app3/; } 相关资源 |
NGINX 反向代理
释放双眼,带上耳机,听听看~!