PHP が返すデータが nginx によって切り捨てられる問題の解決策

WBOY
リリース: 2016-06-20 12:26:11
オリジナル
1393 人が閲覧しました

発生する問題:

1 コマンドラインで php スクリプトを直接実行すると、通常のデータが返されます

2 nginx 経由でアクセスすると、切り詰められたデータが返されます

トラブルシューティング後、fastcgi_temp ディレクトリの読み取りおよび書き込み権限に問題があり、次のようなエラーが Nginx エラー ログに多数記録されます:

2016/06/07 00:41:28 [crit] 32763#0: *5439 open() "/Data/apps/nginx/fastcgi_temp/5/02/0000000025" failed (13: Permission denied) while reading upstream, client: 203.171.237.2, server: www.36nu.com, request: "GET /thread.html HTTP/1.0", upstream: "fastcgi://127.0.0.1:9000",...
ログイン後にコピー

この文から判断します。返されたデータが大きすぎるため、ファイルの形式で保存する必要があるはずですが、nginx には読み取りおよび書き込み権限がないため、fastcgi_temp に読み取りおよび書き込み権限を与えました。

chmod -R 764 /usr/local/nginx/fastcgi_temp/
ログイン後にコピー

Nginx のバッファー メカニズムについて簡単に説明します。Nginx は FastCGI サーバーからの応答をメモリにバッファーし、順番にクライアントに送信します。バッファのサイズは、fastcgi_buffers と fastcgi_buffer_size の 2 つの値によって制御されます。

たとえば、次の構成:

fastcgi_buffers 8 4K;

fastcgi_buffer_size 4K;

fastcgi_buffers は、4K サイズのバッファを最大 8 つ作成するように nginx を制御します。 fastcgi_buffer_size は、Response を処理するときの最初のバッファのサイズであり、前者には含まれません。したがって、作成できる合計最大メモリ バッファ サイズは 8*4K+4K = 36k です。これらのバッファは、実際の応答サイズに基づいて動的に生成され、一度にすべて作成されるわけではありません。たとえば、8K ページの場合、Nginx は 2*4K の合計 2 つのバッファを作成します。 Response が 36k 以下の場合は、当然ながらすべてのデータがメモリ内で処理されます。 Response が 36k より大きい場合はどうなりますか?それが fastcgi_temp の機能です。追加のデータは一時的にファイルに書き込まれ、このディレクトリの下に配置されます。 36Kb はメモリにバッファされ、残りはファイルに書き込まれます。実際の状況では、Nginx プロセスを実行しているユーザーには fastcgi_temp ディレクトリへの読み取りおよび書き込み権限がありません。この解決策は、fastcgi_temp ディレクトリへの読み取りおよび書き込み権限を付与することで比較的簡単に解決できます。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!