NGINX 反向代理百度 API

NGINX 反向代理到本机服务做过不少,但很少思考参数的意义。技术债的隐患往往会在特定时候爆发。为了解决如题的问题,我直接把配置改改拿来使用,却发现行不通。

问题

问题在于对于请求头 Host 属性的设置问题。Host 表示的是请求服务器的地址。在转发的时候,可以通过 proxy_set _header 来设置目的地址。

对于转发到本机服务,可以使用 $http_host 来指定本机作为目的地址。但是对于若想转发到非本机服务,Host 需要设置为目的服务所在的主机 IP 或者域名。

在如题所描述的场景中,我需要把请求转发到 vop.baidu.com 这个域名下的 server_api 接口。该接口属于非服务器本机服务,故需要替换 $http_host 为域名 vop.baidu.com。(场景描述 localhost/server_api => vop.baidu.com/server_api)

更多

X-Forwarded-For 和 Host 头并非一定要设置,但是不当设置会导致副作用。这和 NGINX 的转发机制有关联。其中,上文为提到的 X-Forwarded-For 用于在请求头中维护一组代理 IP 的地址,用来记录是哪个地址转发了这个请求。假如后端接口没有提到需要使用这个头部,那么这个设置并无意义。

location 区块还支持正则匹配重写。这为更加灵活地定制匹配规则提供了帮助。

参考链接

HTTP 请求头中的 X-Forwarded-For

NGINX Reverse Proxy

发表评论

电子邮件地址不会被公开。 必填项已用*标注