Dans ma configuration nginx 0.8.34, j'utilise la fonction X-Accel-Redirect pour contrôler les téléchargements de fichiers dans le code de l'application sans que l'application gère le téléchargement lui-même.
Après beaucoup de douleur, cela fonctionne maintenant, sauf que nginx renvoie toujours le fichier avec le text/html
type de contenu.
Le type de contenu par défaut est application / octet-stream, spécifié dans le http
bloc.
Le bloc serveur contient, entre autres, la définition du répertoire dans lequel les fichiers sont stockés:
location /files {
default_type application/octet-stream;
alias /srv/www/uploads;
internal;
}
J'ai donc spécifié le type de contenu même ici, mais rien n'a changé.
Je ne veux pas définir le Content-Type par l'application, car alors je ralentirais (je devrais d'abord le déterminer). Donc, idéalement, nginx retournerait le mimetype correct en fonction de l'extension du fichier (j'inclus mime.types dans le http
bloc).
Personnellement, je viens de définir application / octet-stream dans l'application, mais vous pourrez peut- être utiliser fastcgi_ignore_headers pour empêcher Nginx d'utiliser l'en-tête fourni par le back-end.
la source
Content-Type
. Selon wiki.nginx.org/HttpFcgiModule#fastcgi_ignore_headers valeurs possibles sontX-Accel-Redirect
,X-Accel-Expires
,Expires
ouCache-Control
nginx: [warn] invalid value "Content-Type" in /etc/nginx/conf.d/default.conf:27
maisfastcgi_ignore_headers "Expires"
fonctionneavec php-fpm:
indique à php de ne pas envoyer d'en-tête Content-Type (pas même vide), et nginx devinera le type pour vous et ajoutera l'en-tête :)
la source