域名是在阿里云,服务器 a 也是在阿里云。 然后通过反向代理指向本地服务器 b 。
如果在 nginx 配置中增加下边几项就报上边的错误。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
如果去除这几项就正常了。
所以想请问下,这种情况是怎么造成的。不理解。
1
jucelin 39 天前
拦截是不是未备案拦截?
|
2
InDom 39 天前
这几个 header 主要分两类,
proxy_set_header Host $host; 指定了一个主机名, 检查是否正确指向目标服务器,以及目标服务器是否允许接受这个 host. 剩下的都是关于“构造、伪造”客户端 IP 的流程, 不是说你在伪造, 而是有可能被目标系统认为你在伪造,所以检查到目标服务器(到程序)的链路中是否做了类似的判断. |
3
summerwar 39 天前
贴下 nginx 的完整配置和日志的完整信息,搞技术又不能靠猜,除非之前自己遇到过
|
4
awanganddong OP @jucelin 拦截是该网站已被拦截提示。
没有其他的消息。 这些 proxy_set_header 配置项主要是用于传递客户端的请求信息给后端服务器,不会直接检测或暴露后端服务器的相关信息,但可能会间接影响到访问。以下是这些配置项的作用和对后端服务器的影响: proxy_set_header Host $host; 这个配置项会将客户端请求的域名信息传递给后端,目的是让后端服务器“认为”它正在直接接收来自用户的请求,而不是来自代理服务器。 不会暴露后端信息:只是转发客户端请求的主机信息,对后端服务器的配置或 IP 没有直接暴露作用。 proxy_set_header X-Real-IP $remote_addr; 将客户端的真实 IP 地址传递给后端,以便后端服务器可以识别用户的真实来源 IP 。 不会暴露后端信息:此头信息用于传递客户端 IP ,只影响后端获取的用户 IP 信息。 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 将用户的真实 IP 地址和代理链(经过的代理服务器 IP )传递给后端服务器,以帮助后端识别请求的来源链条。 不会暴露后端信息:该头信息只是用来传递经过的代理链信息,不包含后端服务器的配置信息。 proxy_set_header X-Forwarded-Proto $scheme; 这个配置项传递了用户请求的协议( HTTP 或 HTTPS )信息给后端服务器,使后端知道客户端请求的原始协议。 不会暴露后端信息:此配置仅包含客户端协议信息,对后端服务器没有信息泄露的风险。 所以是很奇怪的 |
5
mmdsun 39 天前
做了校验不让反代 你把 hosts 设置你要代理的网址试试看。
location /otherweb/ { proxy_pass https://test.com.cn/; proxy_set_header Host "test.com.cn"; |
6
yinmin 39 天前
是这行命令造成的:proxy_set_header Host $host;
|
7
awanganddong OP |
8
giantreaper0 39 天前
$host 和 $http_host 基本等同于当前浏览器的主机名,那肯定是 a, 服务器 b 识别出来不是 b 所以提示拦截。
有两种解决方式 1. proxy_set_header Host "example.com"; // 写死被代理服务器的主机名 2. proxy_set_header Host $proxy_host; // 自动根据 proxy_pass 的后端地址生成 |