Django X-Accel-Redirect功能不适用于外部连接(docker网络内部)

Django X-Accel-Redirect功能不适用于外部连接(docker网络内部),django,nginx,x-accel-redirect,Django,Nginx,X Accel Redirect,我正在尝试允许带有django的容器管理对另一个带有nginx的容器提供的媒体文件的访问。因此,尽管有nginx文档,我还是从位置配置中删除了internal行: server { server_name nginx; //name of the container used for accessing from another containers charset UTF-8; client_max_body_size 32m; listen 80;

我正在尝试允许带有django的容器管理对另一个带有nginx的容器提供的媒体文件的访问。因此,尽管有nginx文档,我还是从位置配置中删除了
internal
行:

server {
    server_name nginx; //name of the container used for accessing from another containers
    charset UTF-8;
    client_max_body_size 32m;
    listen 80;

    location /protected/media/ {
        // internal;
        alias /data/djan,go/media/;
    }
}
通过这个配置,我能够使用来自django容器的/protected/media URL,因此我成功地完成了
wgethttp://nginx/protected/media/images/bank_credentials/H0grsrvgsBo.jpg
来自装有django的容器外壳

但是django的代码

response = HttpResponse()
del response['Content-Type']
response['X-Accel-Redirect'] = 'http://nginx/protected/media/' + path # I'm sure that this url matches to url I've used succesfully with wget
return response 
返回404 以下是django的url:

path('media/<path:path>', media_access, name='media')
path('media/',media\u access,name='media')

我错在哪里?

听起来你想做的是让
X-Accel-Redirect
具有外部域/主机的绝对URL,因此需要根据删除
内部
,以便无需身份验证即可访问文件。它不是那样工作的

请看下面提供的示例,例如:

location /x-accel-redirect-here/ {
    proxy_method GET;
    proxy_pass_request_headers off;
    proxy_pass_request_body off;

    proxy_pass ...
}
nginx需要在
X-Accel-Redirect
中使用相对URL,这是完全合理的;否则,nginx如何确切地知道如何处理请求


换句话说,您可能必须在
X-Accel-Redirect
中使用相对URL,如果您需要转义到另一个容器中,则需要使用额外的
内部
位置
指令来执行显式的
代理传递


请注意,这样做可能会使首先使用
X-Accel-Redirect
的全部好处失效,特别是由于默认情况下
处于打开状态,这会导致nginx将每个代理文件保存到光盘上,因此,光盘吞吐量可能很快成为您设置中的限制因素。

您是否直接使用Django检查URL,而不使用中间的Nginx?您这里的真正意思是逗号
alias/data/djan,go/media/