J'ai construit un formulaire de téléchargement de fichier à l'aide du code AJAX qui fonctionne parfaitement sur mon hôte local (xampp/Apache). Je peux télécharger des fichiers aussi grands que 256Mo. Utilisation de HTTP.
Cependant, lorsque je télécharge ce code sur mon serveur nginx sur aws ec2, je reçois un 404 en essayant de télécharger un fichier plus volumineux que 10 Ko (oui, c’est un K). J'utilise HTTPS.
Je pensais que les paramètres de php.ini étaient peut-être incorrects, alors j'ai ajouté ce code au formulaire de téléchargement de fichier.
<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>
Je reçois cette sortie de la console.
Notez le 0 suivi de "succès de téléchargement de fichier". Ici 0 est le code d'erreur de fichier i.e. $_FILES['ninja_file']['error']
Les deux fichiers que j'ai téléchargés dans ce cas étaient 9Ko.
Lorsque vous voyez la Post ... 404 ()
en bas, cela est dû à mon intention de télécharger un fichier de 22 Ko.
Dans nginx.conf je mets
client_max_body_size 0;
Définir la taille sur 0 désactive la vérification de la taille du corps de la demande du client conformément à la documentation http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
La technologie:
Vérifiez le fichier nginx error.log (basé sur l'emplacement de nginx.conf error_log).
$ Sudo nano /path/to/nginx/error.log
Il y a une erreur "autorisation refusée" sur /var/lib/nginx
. Cela est dû au fait que j'ai modifié le paramètre user
dans nginx.conf à partir de
user nginx;
à quelque chose d'autre. Dans ce cas,
user iam;
Solution:
Vérifiez la propriété actuelle de l'utilisateur et du groupe sur/var/lib/nginx.
$ ls -ld /var/lib/nginx
drwx------ 3 nginx nginx 4096 Aug 5 00:05 /var/lib/nginx
Cela vous indique qu'un utilisateur et un groupe probablement inexistants nommé nginx
possèdent ce dossier. Cela empêche le téléchargement de fichiers.
Changez la propriété du dossier en utilisateur défini dans nginx.conf dans ce cas iam
(Sudo n'est peut-être pas requis).
$ Sudo chown -Rf iam:iam /var/lib/nginx
Vérifiez que cela a réellement changé.
$ ls -ld /var/lib/nginx
drwx------ 3 iam iam 4096 Aug 5 00:05 /var/lib/nginx
La permission refusée devrait maintenant disparaître. Vérifiez le fichier error.log (basé sur l'emplacement de nginx.conf error_log).
$ Sudo nano /path/to/nginx/error.log
Si cela ne fonctionne pas, vous devrez peut-être recharger nginx et php-fpm.
$ Sudo service nginx reload
$ Sudo service php-fpm reload