Openresty/nginx代理https下坑记录的背景需求是客户在服务器上部署了argocd服务。 因为我们需要控制服务入口,所以我们打算使用openresty创建反向代理的其他访问控制逻辑。
后台服务强制使用https,客户也需要https。 客户自己将b域名绑定到了服务上。 我们为客户定义了新的域名a。 最终效果是客户访问https://A域名,并实际展示https://B域名的内容。
Ps :这听起来很奇怪,毕竟我们之前的nginx代理移动到同一个域名,或者在ip下,移动到另一个域名是很奇怪的。
即使部署途中遇到漏洞很多的人,也花了很多时间,但在这里记录。 主要有两个孔:
访问a域名,拦截实际展示b域名的内容代理https :即https服务,访问传输到https的坑一: a域名,实际展示b域名的内容是很长的虽然尝试了各种rewrite命令等,但域名会跳至b域名。 这不符合需要。 最后,我们看到这篇博文Nginx与数字服务器CLB合作完成了请求标头的主机重写,我们只需要更改header中主机字段的值,将其更改为后台服务b的原始域名即可
解决方法:在位置中指定字段主机的值
proxy_set_header Host A_hostname; 主机字段角色the headerfieldinarequestprovidesthehostandportinformationfromthetargeturi, enablingtheoriginservertodistinguishamongresourceswhileservicingrequestsformultiplehostnamesonasingleipaddress。
aclientmustincludeahostheaderfieldinallhttp/1.1请求消息sages.iftherequesteduridoesnotincludeaninternethostnamefortheserverves thenthehostheaderfieldmustbegivenwithanemptyvalue.an http/1.1 proxymustensurethatanyrequestmessageitforwardsdoescontainanappropriatehostheaderfieldthatidentifiesthervicebeingrequested sed http/1.1 serversmustrespondwitha 400 (bad请求) statuscodetoanyhttp/1.1 requestmessagewhich
请求的“主机”标头字段显示来自目标URI的主机和端口信息。 这样,源服务器可以在为单个IP地址上的多个主机名请求提供服务时区分资源。
简单来说,服务器在Host字段中区分同一ip计算机上的不同服务,从而实现多个虚拟主机。 参考:主机在HTTP请求标头中的作用
接下来