質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3160閲覧

AWSで大容量のファイルダウンロードができません。

take45

総合スコア30

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/01/07 09:50

編集2022/01/07 09:55

環境

インフラ AWS ELB + EC2*1(t2.micro) + RDS + S3
アプリ nginx1.20.0 + PHP 8.0.8 + laravel8

解決したいこと

社内のファイルアーカイブアプリを開発しています。
開発中のLaravelアプリで100MB程度のファイルは問題なくダウンロードできますが、
500MBのファイルをダウンロードすると502エラーが出ます。
ELBを使用していないときは、2GBでも問題なかったのですが、
ELBを使用してからできなくなりました。
ELB使用時でも大容量のダウンロードができるようご教授願います。
(ELBはSSL化するために導入しました。)

やったこと

  1. nignx errorログの確認

2022/01/07 18:40:34 [error] 3090#3090: *2418 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 10.0.10.7, server: _, request: "GET /archive/download/4 HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock:", host: "test.com", referrer: "https://test.com/archive"
※test.comはダミー

  1. php.ini編集

;max_execution_time = 30
max_execution_time = 300

  1. php-fpm.d/www.conf編集

;request_terminate_timeout = 0
request_terminate_timeout = 1200

  1. ELB属性編集

アイドルタイムアウト 1200 秒

結果

変わらず502エラー

以上よろしくお願いします。
初心者なのでわかりやすくご教授いただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正直それだけだとなんとも言えませんが…。
確実に言えるのは、まず設計を見直すべきでしょう。

nginxがConnection reset by peerと返しているので、ALBではなくアプリケーションの方に問題があるように思えます。(ALBがない時にうまく行っていたのはよくわかりませんが)
アプリケーションをダウンロードが完了するまでレスポンスを待機させるような作りにしてませんか?
ダウンロード完了と以後の処理を非同期にしないとダウンロードが完了するまで以後の処理を待ってしまうので、レスポンスが中々返ってこずタイムアウトしてしまいます。
まず、サーバ上にファイルを置いてダウンロードさせるのは設計として微妙なので、S3にファイルを配置させて、必要な時に一時URLを発行してそこからダウンロードさせるようにしてみるといいでしょう。

また、そもそもサーバ上にファイルを配置する設計だとファイルが1つのサーバに紐付いてしまうためALBの存在する意味はほとんどなく、その作りのままで行くのであればALBを使わないでLet's EncryptなどでHTTPS化したほうがよいでしょう。
上述のようにサーバ上にファイルを置かずS3からダウンロードさせるような作りにするか、EFSを使ってそこにファイルを置くかすれば冗長化も可能になるので意味は出てきますが。
EFSを使うケースも書きましたが、EFSはファイルアーカイブ用途としては高いので積極的には勧めません。
EFSほどではないにしろ、EBSもファイルアーカイブ用途としてはけして安くないのでS3をうまく使うといいです。

投稿2022/01/07 11:22

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

take45

2022/01/09 00:36

ご回答ありがとうございました。 ELBなしでうまく行っていたので、AWSが原因と決めつけていました。 S3は使用していましたが、ファイル名の変更やzip圧縮してからダウンロードするなどの 作業があったので、コントローラー経由でダウンロードしていました。 テストでaタグで直接S3パスでダウンロードしたら大容量(2GB)でも成功しました。 ご指摘の通り、非同期ダウンロードを実装したいと思います。 大変参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問