Nginx+PHPの環境でサイズの大きいファイルをアップロードする ~CloudRun編~
経緯
こちらの記事の続きです。
続きと言っても、やってることは前回と全然別の内容になるので、読まなくても大丈夫です。
動作環境・前提
CloudRunのマルチコンテナ(サイドカー)で、NginxとPHPの2つのコンテナを立てています。
バージョン | |
---|---|
PHP | 8.3.6 |
Nginx | 1.29.0 |
対象者
- サイズの大きいファイルをアップロードしようとした時、ローカル環境だと成功するのに本番環境だと失敗する方
- CloudRunの設定の仕方がわからない方
本題
最初に、以下のドキュメントに次のような記述があるのをご確認ください。
説明 | 上限 |
---|---|
HTTP/1 リクエストの最大サイズ | HTTP/1サーバーを使用する場合は32 MiB。HTTP/2サーバーを使用する場合は無制限。 |
「HTTP/2サーバーを使用する場合は無制限」だそうです。つまり、HTTP/2サーバーが使えれば、サイズの大きいファイルもアップロードできるはず。
というわけで、今回の問題は、CloudRunの設定でHTTP/2サーバーを使用するよう強制すれば解決します。
単純にCloudRunの設定だけ変えてもダメで、Nginxの設定も合わせて変更して再デプロイする必要があります。
CloudRunの設定
Cloud ConsoleからCloudRunの画面を開いて設定します。
「新しいリビジョンの編集とデプロイ」を押してください。
すると、CloudRunサービスの細かい設定変更ができる画面が出てくるので、その中の「ネットワーキング」のタブを開きます。
このタブの中にある「HTTP/2 エンドツーエンドを使用する」にチェックを入れてください。
これで、CloudRunの設定は完了です。
Nginxの設定
続いて、Nginxの設定をしていきます。
NginxがHTTP/2でのアクセスを受け取れるように設定ファイルを修正して、再デプロイします。
server {
listen 8080 http2;
# 以下省略
}
listenするポートを設定しているところに、http2
というワードを追記します。
これで、NginxがHTTP/2によるアクセスを受け取れるようになりました。
上記のCloudRunとNginxの設定は、どちらからやっても問題ありません。
ただ、どちらかの設定を反映した時点でもう一方の設定が噛み合わなくなり、その間WebページやAPIにはアクセスできなくなる場合があります。
なので、作業するときは出来るだけ同じタイミングでやるのが望ましいと思います。
最後に
この記事の内容、やってること自体はとても簡単なので知ってたら一発だと思うんですが、僕の場合はなかなか自分の環境に合った内容の記事やドキュメントが見つからなくて苦戦してしまいました、、
参考にさせてもらった記事(参考文献をご参照ください)ではNginxの設定が僕の記事と違うんですが、これは僕の環境で同様の設定にするとデプロイに失敗してしまうためです。
環境が同じでもデプロイ方法が違うとかで上手くいかない場合があるかもしれないので、もしこの記事の方法で試して上手くいかなければそういうことかなと思って別のやり方を探してみてください。
そして、ぜひ「この環境だとこういう方法・こういう設定じゃないと無理だった」みたいな話があったらコメントで教えてください。
参考文献

株式会社 カラビナテクノロジーは「命綱や支点を素早く確実に繋ぐカラビナ。そんなカラビナのような役割をテクノロジーで実現したい」という想いのもと、福岡で設立。 主にシステム開発・アプリ開発・ Webサイト制作を行っています。採用情報→karabiner.tech/career
Discussion