web-dev-qa-db-ja.com

10kbを超えるファイルをアップロードすると404を受信する

Localhost(xampp/Apache)で完全に実行されるAJAXコードを使用してファイルアップロードフォームを作成しました。最大256MBのファイルをアップロードできます。 HTTPを使用します。

ただし、このコードをaws ec2のnginxサーバーにアップロードすると、10KBを超えるファイルをアップロードしようとすると404が返されます(はい、Kです)。 HTTPSを使用しています。

Php.iniの設定が間違っている可能性があるため、このコードをファイルアップロードフォームに追加しました。

<script>
    console.log("max_execution_time = <?php echo(ini_get('max_execution_time')); ?>");
    console.log("max_input_time = <?php echo ini_get('max_input_time'); ?>");
    console.log("memory_limit = <?php echo ini_get('memory_limit'); ?>");
    console.log("post_max_size = <?php echo ini_get('post_max_size'); ?>");
    console.log("file_uploads = <?php echo ini_get('file_uploads'); ?>");
    console.log("upload_max_filesize = <?php echo ini_get('upload_max_filesize'); ?>");
    console.log("max_file_uploads = <?php echo ini_get('max_file_uploads'); ?>");
    console.log("default_socket_timeout = <?php echo ini_get('default_socket_timeout'); ?>");
</script>

このコンソール出力を取得します。

0の後に「ファイルのアップロード成功」が続くことに注意してください。ここで、0はファイルエラーコード、つまり$_FILES['ninja_file']['error']です。

この場合にアップロードした2つのファイルは9KBでした。

下部にPost ... 404 ()が表示されたら、22KBのファイルをアップロードしようとしたことが原因でした。

enter image description here

Nginx.confで設定します

client_max_body_size 0;

サイズを0に設定すると、ドキュメントごとにクライアント要求の本文サイズのチェックが無効になります http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size

技術:

  • Wordpress 4.7
  • PHP 7.0
  • NGINX 1.10
1
nu everest

(nginx.confのerror_logの場所に基づいて)nginx error.logを確認します。

$ Sudo nano /path/to/nginx/error.log

/var/lib/nginxに「許可が拒否されました」エラーがあります。これは、nginx.confのuser設定を

user nginx;

他の何かに。この場合、

user iam;

解決策:

/ var/lib/nginxで現在のユーザーとグループの所有権を確認します。

$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug  5 00:05 /var/lib/nginx

これにより、nginxという名前の存在しない可能性のあるユーザーとグループがこのフォルダーを所有していることがわかります。これにより、ファイルのアップロードが防止されます。

この場合、iamでnginx.confで定義されたユーザーにフォルダーの所有権を変更します(Sudoは必要ない場合があります)。

$ Sudo chown -Rf iam:iam /var/lib/nginx

実際に変更されたことを確認します。

$ ls -ld /var/lib/nginx
drwx------ 3 iam iam 4096 Aug  5 00:05 /var/lib/nginx

許可拒否エラーはなくなります。 error.logを確認します(nginx.confのerror_logの場所に基づいて)。

$ Sudo nano /path/to/nginx/error.log

それがうまくいかない場合、nginxとphp-fpmをリロードする必要があるかもしれません。

$ Sudo service nginx reload
$ Sudo service php-fpm reload
0
nu everest