Nginx в контейнере docker не обслуживает статические файлы

#python #django #docker #nginx #nginx-config

#python #django #docker #nginx #nginx-config

Вопрос:

Недавно я взял на себя чей-то проект, и я должен развернуть его на новом сервере. Существует сервер Nginx, обслуживающий статические файлы приложения Django. Я продолжаю получать ошибку 404-not-found от Nginx. Вот файл Nginx.conf:

 server {

    listen 80;
    server_name localhost;

    return 301 https://$host$request_uri;

}

server {

    listen 443 ssl http2 default_server;
    listen [::]:443 ssl http2 default_server;
    server_name localhost;
    charset utf-8;
    client_max_body_size 150M;

    include /config/nginx/proxy-confs/*.subfolder.conf;

    include /config/nginx/ssl.conf;

    location /static {
        sendfile  on;
        sendfile_max_chunk 25m;
        alias /static;
    }

    location /media/user {
        sendfile  on;
        sendfile_max_chunk 50m;
        internal;
        alias /media/user;
    }

    location /admin/login {
        return 301 " /login";
    }

    location /media/protected {
        if ($http_user_agent ~* (360Spider|80legs.com|Abonti|AcoonBot|Acunetix|adbeat_bot|AddThis.com|adidxbot|ADmantX|AhrefsBot|AngloINFO|Antelope|Applebot|BaiduSpider|BeetleBot|billigerbot|binlar|bitlybot|BlackWidow|BLP_bbot|BoardReader|Bolt 0|BOT for JCE|Bot mailto:craftbot@yahoo.com|casper|CazoodleBot|CCBot|checkprivacy|ChinaClaw|chromeframe|Clerkbot|Cliqzbot|clshttp|CommonCrawler|comodo|CPython|crawler4j|Crawlera|CRAZYWEBCRAWLER|Curious|Curl|Custo|CWS_proxy|Default Browser 0|diavol|DigExt|Digincore|DIIbot|discobot|DISCo|DoCoMo|DotBot|Download Demon|DTS.Agent|EasouSpider|eCatch|ecxi|EirGrabber|Elmer|EmailCollector|EmailSiphon|EmailWolf|Exabot|ExaleadCloudView|ExpertSearchSpider|ExpertSearch|Express WebPictures|ExtractorPro|extract|EyeNetIE|Ezooms|F2S|FastSeek|feedfinder|FeedlyBot|FHscan|finbot|Flamingo_SearchEngine|FlappyBot|FlashGet|flicky|Flipboard|g00g1e|Genieo|genieo|GetRight|GetWeb!|GigablastOpenSource|GozaikBot|Go!Zilla|Go-Ahead-Got-It|GrabNet|grab|Grafula|GrapeshotCrawler|GTB5|GT::WWW|Guzzle|harvest|heritrix|HMView|HomePageBot|HTTP::Lite|HTTrack|HubSpot|ia_archiver|icarus6|IDBot|id-search|IlseBot|Image Stripper|Image Sucker|Indigonet|Indy Library|integromedb|InterGET|InternetSeer.com|Internet Ninja|IRLbot|ISC Systems iRc Search 2.1|jakarta|Java|JetCar|JobdiggerSpider|JOC Web Spider|Jooblebot|kanagawa|KINGSpider|kmccrew|larbin|LeechFTP|libwww|Lingewoud|LinkChecker|linkdexbot|LinksCrawler|LinksManager.com_bot|linkwalker|LinqiaRSSBot|LivelapBot|ltx71|LubbersBot|lwp-trivial|Mail.RU_Bot|masscan|Mass Downloader|maverick|Maxthon$|Mediatoolkitbot|MegaIndex|MegaIndex|megaindex|MFC_Tear_Sample|Microsoft URL Control|microsoft.url|MIDown tool|miner|Missigua Locator|Mister PiX|mj12bot|Mozilla.*Indy|Mozilla.*NEWT|MSFrontPage|msnbot|Navroad|NearSite|NetAnts|netEstate|NetSpider|NetZIP|Net Vampire|NextGenSearchBot|nutch|Octopus|Offline Explorer|Offline Navigator|OpenindexSpider|OpenWebSpider|OrangeBot|Owlin|PageGrabber|PagesInventory|panopta|panscient.com|Papa Foto|pavuk|pcBrowser|PECL::HTTP|PeoplePal|Photon|PHPCrawl|planetwork|PleaseCrawl|PNAMAIN.EXE|PodcastPartyBot|prijsbest|proximic|psbot|purebot|pycurl|QuerySeekerSpider|R6_CommentReader|R6_FeedFetcher|RealDownload|ReGet|Riddler|Rippers 0|rogerbot|RSSingBot|rv:1.9.1|RyzeCrawler|SafeSearch|SBIder|Scrapy|Scrapy|Screaming|SeaMonkey$|search.goo.ne.jp|SearchmetricsBot|search_robot|SemrushBot|Semrush|SentiBot|SEOkicks|SeznamBot|ShowyouBot|SightupBot|SISTRIX|sitecheck.internetseer.com|siteexplorer.info|SiteSnagger|skygrid|Slackbot|Slurp|SmartDownload|Snoopy|Sogou|Sosospider|spaumbot|Steeler|sucker|SuperBot|Superfeedr|SuperHTTP|SurdotlyBot|Surfbot|tAkeOut|Teleport Pro|TinEye-bot|TinEye|Toata dragostea mea pentru diavola|Toplistbot|trendictionbot|TurnitinBot|turnit|Twitterbot|URI::Fetch|urllib|Vagabondo|Vagabondo|vikspider|VoidEYE|VoilaBot|WBSearchBot|webalta|WebAuto|WebBandit|WebCollage|WebCopier|WebFetch|WebGo IS|WebLeacher|WebReaper|WebSauger|Website eXtractor|Website Quester|WebStripper|WebWhacker|WebZIP|Web Image Collector|Web Sucker|Wells Search II|WEP Search|WeSEE|Wget|Widow|WinInet|woobot|woopingbot|worldwebheritage.org|Wotbox|WPScan|WWWOFFLE|WWW-Mechanize|Xaldon WebSpider|XoviBot|yacybot|Yahoo|YandexBot|Yandex|YisouSpider|zermelo|Zeus|zh-CN|ZmEu|ZumBot|ZyBorg) ) {
            return 410;
        }
        sendfile  on;
        sendfile_max_chunk 50m;
        internal;
        alias /media/protected;
    }

    location /media {
        sendfile  on;
        sendfile_max_chunk 25m;
        alias /media;
    }

    location /media/images/company {
        alias /media/images/company;
    }

    location / {
        proxy_pass http://web:8000;
        proxy_redirect off;
        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-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

}
  

Это выполняется в контейнере docker на компьютере с Linux. Было бы огромной помощью, если бы кто-нибудь мог меня спасти!

РЕДАКТИРОВАТЬ: вот носители DJango и статические конфигурации в settings.py:

 STATIC_URL = '/static/'

STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static_server'),
)

STATIC_ROOT = os.path.join(BASE_DIR,"static")

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

SENDFILE_BACKEND = 'sendfile.backends.nginx'


SENDFILE_ROOT = '/media/'
SENDFILE_URL = '/media/'
  

Я перешел в контейнер docker Nginx и обнаружил, что файлы действительно существуют, но я все еще получаю 404!
Большое спасибо всем, кто может помочь!

Комментарии:

1. опубликуйте URL-адрес медиафайла, который получает настройки 404 и django media

2. Существует много возможностей. Для начала, должны ли статические файлы монтироваться контейнером Nginx? Есть ли объем для статических файлов? Или они встроены в контейнер, в котором размещен Nginx?

3. @K.Railis Спасибо за ответ! Это внутри контейнера Nginx! при попытке access:ace-concordia.com/media/protected/2020/Aly_Gasser_40135687 /… Если я перейду в каталог /media/protected/2020/Aly_Gasser_40135687/transcript/9c0be77746d84dceaec44dc2e5b64b07/ внутри контейнера Nginx, файл действительно там! Я думаю, может быть, это проблема с разрешением, есть идеи?

4. @K.Railis Также кажется, что в журналах ошибок об этом ничего нет, но журналы доступа показывают это и что он получил ответ 404

5. @PankajSharma Привет, спасибо за ответ! Я обновил его! example.com/media/protected/2020/Aly_Gasser_40135687/transcript/9c0be77746d84dceaec44dc2e5b64b07/Sample.pdf и это та ссылка, по которой я перехожу! Файл есть, я перешел к каталогу и нашел его