Kā iestatīt mezglu un Express vietnē Amazon Web Services EC2

Es izveidoju nelielu personīgo failu mitināšanu, es izveidoju aizmuguri, lai augšupielādētos failus pēc to hash glabātu tieši uz HDD /f/ab/cd/ef012345678..., bet bez failu paplašinājumiem un ģenerē URI līdzīgu example.com/f/ab/cd/ef012345678.../filename.jpg.

Nginx apkalpo failus tieši no HDD, izmantojot šo konfigurāciju:

location /f { rewrite '^/f/([a-z0-9]+)/([a-z0-9]+)/([a-z0-9]+)(.*)$' /$1/$2/$3 break; root /srv/cdn/f; } 

T.i. tas sagriež URI pēdējo daļu un nolasa failu, izmantojot tikai tā hash. Tas darbojas labi, taču tas atdala faila mīmikas veidus application/octet-stream kas liek pārlūkprogrammai lejupielādēt visus failus, bet tajā ir jāparāda iespiesti attēli.

Es veicu risinājumu, iekļaujot šajā vietā šādu konfigurācijas daļu:

if ($request_uri ~* \.png$) { add_header Content-Type 'image/png'; } 

Kas novērš problēmu pārlūkprogrammai Google Chrome un pirmajai pārlūkprogrammas Firefox ielādēšanai.

Bet, kad otro reizi atveru saiti Firefox vai vienkārši pārlādēju lapu, tas liek man to lejupielādēt. Acīmredzot Firefox slikti apstrādā Content-Type ar 304 atbildēm (es pārbaudīju galvenes, Nginx nosūta 304 atbildes un Content-Type galvenes ar šo konfigurāciju, ja fails tika izvilkts no kešatmiņas).

Es meklēju veidu, kā vai nu noteikt Nginx config, vai fails ir serveris no kešatmiņas, nevis pievienot labāku Nginx risinājums.

Es zinu, ka labāka ideja ir mainīt aizmuguri un pievienot failu paplašinājumus, tas arī atrisinās dažas turpmākās problēmas, taču tagad es nevaru gulēt un man jāzina atbilde, izmantojot Nginx tikai tad, ja tāda ir.

Man nav ne jausmas, kāpēc šī metode darbojas, un jūsu rewrite...break metode nav. Bet jūs varat notvert regulāro izteiksmi location paziņojumu un izmantojiet to alias izteiksmi, un tas, šķiet, atstāj Content-Type kā norādīts sākotnējā pieprasījuma URI.

Piemēram:

location ~ ^/(f/[a-z0-9]+/[a-z0-9]+/[a-z0-9]+) { alias /srv/cdn/$1; } 

Plašāku informāciju skatiet šajā dokumentā.

Ņemiet vērā, ka regulārā izteiksme location priekšraksti ir sakārtoti, tāpēc tā pozīcija konfigurācijas failā var būt nozīmīga. Plašāku informāciju skatiet šajā dokumentā.

  • Wow, tas faktiski darbojas! Paldies. Liek man vēlēties uzzināt, kāpēc tagad: D Es vienkārši pieņēmu, ka tas nedarbosies tāpat kā try_files un rewrite nē - viņi iegūst mīmikas veidu failu paplašinājums, nevis URI.
  • 1 rewrite un try_files izmaiņas $uri iespējams, tāpēc mainās efektīvais faila paplašinājums.

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?