我在 Nginx 中遇到了安全性问题X-Accel-Redirect
。
Nginx 服务器 777
location /api {
allow 100.100.100.1;
deny all;
proxy_pass http://api-server;
}
#The api-sever will respond with an `X-Accel-Redirect` header to the following location `@server888`
location @server888 {
internal;
proxy_pass http://server888$request_uri;
}
Nginx 服务器 888具有相同的配置/api
location /api {
allow 100.100.100.1;
deny all;
proxy_pass http://api-server;
}
但是,所有来自源 IP100.100.100.1
到服务器 777收到来自服务器 777,错误如下:
access forbidden by rule while reading response header from upstream
据我所知,该@server888
位置正在阻止请求,但我的理解是该internal
指令应该允许来自的请求X-Accel-Redirect
,而不必为提供明确的allow
指令100.100.100.1
。
这是正确的吗?还是我需要在该@server888
位置授予更广泛的权限才能使其正常工作?
答案1
因此,看起来自定义location
(@server888)需要允许环回地址才能使其正常工作:
location @server888 {
allow 127.0.0.1;
internal;
proxy_pass http://server888$request_uri;
}
我不确定这里的技术解释是什么。
通常情况下,internal
当请求由以下方式生成时,该指令应该允许访问X-Accel-Redirect
:
http://nginx.org/en/docs/http/ngx_http_core_module.html#internal
我的猜测是,这仅适用于location
本地情况,而不是上游的反向代理,或者该位置deny all;
在配置中继承了更全局的情况。