upstream
作为反向代理,一般都需要向上游服务器的集群转发请求。upstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass使用。
|
|
upstream 定义了一组上游服务器,并命名为 backend
。
proxy_pass
proxy_pass 指令设置代理服务器的协议和地址。协议可以指定 “http “或 “https”。地址可以指定为域名或IP地址,也可以配置为 upstream 定义的上游服务器:
|
|
proxy_set_header
在传递给上游服务器的请求头中,可以使用proxy_set_header 重新定义或添加字段。一般我们使用 proxy_set_header 向上游服务器传递一些必要的信息。
|
|
上面的配置使用 proxy_set_header 添加了三个 HTTP header:
- Host
Host 是表明请求的主机名。默认情况下,Nginx 向上游服务器发送请求时,请求头中的 Host 字段是上游真实服务器的IP和端口号。如果我们想让传递给上游服务器的 Host 字段,包含的是用户访问反向代理时使用的域名,就需要通过 proxy_set_header
设置 Host 字段,值可以为 $host 或 $http_host,区别是前者只包含IP,而后者包含IP和端口号。
- X-Real-IP
经过反向代理后,上游服务器无法直接拿到客户端的 ip,也就是说,在应用中使用request.getRemoteAddr()
获得的是 Nginx 的地址。通过 proxy_set_header X-Real-IP $remote_addr;
,将客户端的 ip 添加到了 HTTP header中,让应用可以使用 request.getHeader(“X-Real-IP”)
获取客户端的真实ip。
- X-Forwarded-For
如果配置了多层反向代理,当一个请求经过多层代理到达上游服务器时,上游服务器通过 X-Real-IP 获得的就不是客户端的真实IP了。那么这个时候就要用到 X-Forwarded-For ,设置 X-Forwarded-For 时是增加,而不是覆盖,从客户的真实IP为起点,穿过多层级代理 ,最终到达上游服务器,都会被记录下来。
Nginx 作为反向代理支持的所有特性和内置变量都可以在 ngx_http_proxy_module 的文档页面找到。
示例:https://briteming.blogspot.com/2024/11/nodemdblog.html
-----
参考:
https://server.51cto.com/article/770062.html
https://www.cnblogs.com/wenxuehai/p/14974657.html#autoid-h2-3-1-0
No comments:
Post a Comment