рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдПрдВрдб рдирд┐рдЧреНрдиреЗрдХреНрд╕: рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЕрдкрдиреЗ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рдЕрдкрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдирдЧрдиреЗрдХреНрд╕ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд░реВрд╕реА рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реАред Php рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд░реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ ... рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореИрдВ рдЗрд╕ рдЕрдВрддрд░ рдХреЛ рднрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред

рдХрд╛рд░реНрдп


рддреЛ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


рдирд┐рд░реНрдгрдп


рдореИрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрдЪрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗред рдирдЧреНрдиреЗрдХреНрд╕ рдХреЗ рдкрд╛рд╕ рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЕрджреНрднреБрдд рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдХрд╛рдо рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЕрдм рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рд░реЗрд▓ рдЖрд╡реЗрджрди рдореЗрдВ, рд╡рд┐рдиреНрдпрд╛рд╕ / рд╡рд╛рддрд╛рд╡рд░рдг / рдЙрддреНрдкрд╛рджрди рдореЗрдВредрдЖрд░рдмреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рд▓рд╛рдЗрди рдХреЛ рдЕрдирдХрдВрдлрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx 

Nginx configs рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 proxy_set_header X-Accel-Mapping /mnt/filestorage/=/private_files/; location /private_files/ { internal; alias /mnt/filestorage/; } 

рд╡рд╣ рд╕рдм рд╣реИред рд╕реЗрдЯрдЕрдк рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Nginx рдФрд░ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ
 # HTTP  GET /download/kino.avi HTTP/1.1 

2. рдирдЧреАрдиреЗрдХреНрд╕ рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдФрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдХрд░рддрд╛ рд╣реИред
 #  Nginx proxy_set_header X-Accel-Mapping /mnt/filestorage/=/private_files/; 

 # HTTP  GET /download/kino.avi HTTP/1.1 X-Accel-Mapping: /mnt/filestorage/=/private_files/ 

3. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рд░реЗрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ send_file рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
 #  rails  ( app/controllers/downloads_controller.rb) send_file('/mnt/filestorage/kino.avi') 

4. рд░реЗрд▓ (рдпрд╛ рдмрд▓реНрдХрд┐ рд░реИрдХ) рдпрд╣ рддрдп рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд░реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдФрд░ рдЕрдм рдлрд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЗрдбрд░ рд╣реЛрдЧрд╛, рдЬрд┐рд╕реЗ рддрдм Nginx рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдмреЙрдбреА рдЦрд╛рд▓реА рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рдореИрдкрд┐рдВрдЧ рд╣реЗрдбрд░ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлрд╝рд╛рдЗрд▓ рдкрде рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред
 #  Rails (config/environments/production.rb) config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' 

 # HTTP  HTTP/1.1 200 OK X-Accel-Redirect: /private_files/kino.avi Content-Type: application/octet-stream Content-length: ... Content-Disposition: attachment; filename="kino.avi"    

5. рдирдЧреНрдиреЗрдХреНрд╕ рдЗрд╕ рд╣реЗрдбрд░ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдкрд╛рддрд╛ рд╣реИ, рдлрд╛рдЗрд▓ рдкрде рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреЗрддрд╛ рд╣реИред
 #  Nginx location /private_files/ { internal; alias /mnt/filestorage/; } 

 # HTTP  HTTP/1.1 200 OK Content-Type: application/octet-stream Content-Length: ... Content-Disposition: attachment; filename="kino.avi" < /mnt/filestorage/kino.avi> 

6. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдкреИрд╕реЗрдВрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Nginx proxy_set_header рдореЗрдВ рдЖрдкрдХреЛ proxy_set_header рдмрдЬрд╛рдп proxy_set_header рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА proxy_set_header

Source: https://habr.com/ru/post/In172531/


All Articles