Функция X-Accel-Redirect не работает для внешних подключений (внутри сети Docker)
Я пытаюсь разрешить контейнеру с 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/;
}
}
С этим конфигом я могу использовать /protected/media url из контейнеров django, поэтому мне удалось это сделать wget http://nginx/protected/media/images/bank_credentials/H0grsrvgsBo.jpg
из оболочки контейнера с джанго.
Но код Джанго
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 Вот URL Джанго:
path('media/<path:path>', media_access, name='media')
Где я не прав?
0 ответов
Похоже, что вы пытаетесь сделать, это иметь X-Accel-Redirect
с абсолютным URL для внешнего домена / хоста, следовательно, необходимо удалить internal
согласно http://nginx.org/r/internal чтобы сделать файлы доступными без аутентификации. Это не работает так.
Взгляните на примеры, представленные на http://nginx.org/r/proxy_pass_request_headers, например:
location /x-accel-redirect-here/ {
proxy_method GET;
proxy_pass_request_headers off;
proxy_pass_request_body off;
proxy_pass ...
}
Для nginx было бы вполне разумно предъявлять требования к использованию относительных URL в X-Accel-Redirect
; в противном случае, как nginx узнает, как именно обрабатывать запрос?
Другими словами, вам, вероятно, придется использовать относительные URL в X-Accel-Redirect
и, если вам требуется экранирование в другой контейнер, internal
location
Директивы сделать явное proxy_pass
в зависимости от обстоятельств.
Обратите внимание, что это может лишить вас всех преимуществ использования X-Accel-Redirect
во-первых, особенно из-за того, что http://nginx.org/r/proxy_buffering был on
по умолчанию, что заставляет nginx сохранять каждый прокси-файл на диск, поэтому пропускная способность диска может быстро стать ограничивающим фактором в вашей настройке.