9
votes

Message "En-tête X-Accel-Mapping manquant" dans le journal des erreurs NGinx

Je gère un site de rails 3 sur Ubuntu 8.04 avec Nginx 1.0.0 et passager 3.0.7.

Dans mon erreur nginx.Log J'ai commencé à voir le message en-tête de mappage X-Accel manquant beaucoup. Google me conduit aux docs de rack :: sendfile et vers le Nginx Docs .

MAINTENANT, mon application est accessible via plusieurs domaines et j'utilise send_file dans mon application pour livrer certains fichiers spécifiques au domaine qu'elles sont demandées, par exemple, si vous venez à Domaine1.com/favicon.ico Je lève le Favicon à Public / Sites Web / Domaine1 / Favicon.ico . Cela fonctionne bien et je ne pense pas avoir besoin / envie d'obtenir Nginx impliqué et de créer une zone privée dans laquelle je stocke ces fichiers, comme les échantillons de la rack :: sendfile docs suggère.

Comment puis-je me débarrasser du message d'erreur?


3 commentaires

Salut @zoopzoop - Avez-vous déjà compris cela? J'ai le même problème avec mes rails 3 app hébergé sur Heroku (qui utilise Ngnix).


Même problème ici aussi. Passager 3.0.7, Nginx 1.0.0, Ubuntu.


Non, je n'ai pas encore trouvé de solution.


3 Réponses :


15
votes

Ce message signifie que rack :: sendfile désactivé X-Accel-redirect Pour vous, car vous avez la configuration manquante pour elle dans nginx.conf ...

J'utilise nginx + passager 3 + rails 3.1 .

Les informations rassemblées de ces pages que j'ai figurées Sorti:

http://wiki.nginx.org/x-accel < / a>

http://greenlegos.wordpress.com/2011/09/12/sending-files-with-nginx-x-accel-redirect

http: // code. google.com/subtructruct/source/browse/trunk/gems/rack-1.1.0/lib/rack/sendfile.rb?r=355

servir la Fichiers RGE via NGinx via Rails 2.3 à l'aide de X-SendFile

J'ai le contrôleur qui mesure / téléchargement / 1 Demandes de fichiers de stockage qui ont leur propre structure de répertoire, comme Ceci: stockage / 00/00/1 , stockage / 01/0f / 15 etc. Donc, j'ai besoin de passer cela à travers des rails, mais j'ai besoin d'utiliser send_file méthode qui utilisera x-accel-redirect pour envoyer le fichier final au navigateur via nginx directement .

dans le code que j'ai ceci: xxx

J'ai remplacé le nom de fichier pour cet exemple de fins

Maintenant, je devais ajouter ces lignes à mon nginx.conf : xxx

Le chemin / stockage n'est pas visible du monde extérieur, il est interne uniquement.

rack :: sendfile obtient l'en-tête X-Accel-mappage , extrait le chemin de l'entretien et remplace / var / www / partagé / stockage avec / stockage ... . Ensuite, il crache l'en-tête modifié: xxx

qui est ensuite traité par nginx .

Je peux voir que cela fonctionne correctement Comme le fichier est téléchargé 100 fois plus rapidement qu'auparavant et aucune erreur n'est affichée dans les journaux.

espère que cela aide.


2 commentaires

Cela semble super mais ne m'aidait pas vraiment depuis, comme je l'ai mentionné dans ma question, je n'ai ni que je ne souhaite ni avoir un dossier avec tous les fichiers ... Certains sont stockés dans un répertoire dans mon application Rails partagée entre les déployés Certaines sont en train d'être téléchargées à la volée d'ailleurs et stockées dans le dossier TMP, etc. Je veux juste utiliser send_file sans avoir à configurer un dossier séparé contenant tous les fichiers. Possible?


Oui, dans ce cas, vous devez créer un emplacement interne pour chacune d'elles ... mais je ne sais pas quel est le format de la cartographie X-Accel ... ou, vous pouvez peut-être ajouter cet emplacement interne comme "/ = /" ...



1
votes

Nous avons utilisé la technique similaire que NOICE décrit, mais j'ai remplacé le répertoire "codé dur" contenant tous les fichiers avec l'expression régulière décrivant le dossier contenant les dossiers contenant les fichiers contenant les fichiers contenant les fichiers contenant les fichiers contenant les fichiers < /em>.

Sounds Hard, Ouais? Jetez un coup d'oeil sur ces ( /etc/nginx/sites-available/my.web.site ): xxx

ceci doit être utilisé avec Ce chèque: xxx

pour empêcher la statique du traitement des rails.


0 commentaires

0
votes

J'ai fait par ce manuel

https://mattbrrictons.com/acpealated-Rails-downloads p>

Mon serveur envoie un chemin de fichier /private_upload/file/123/myfile.txt code>, le fichier est dans / data / myapp-data / private_upload / Fichier / 123 / MYFILE.TXT CODE> P>

    # Allow NGINX to serve any file in /data/myapp-data/private_upload
    # via a special internal-only location.
    location /private_upload {
      internal;
      alias /data/myapp-data/private_upload;
    }

    # ---------- BACKEND ----------
    location @backend
    {
        limit_req zone=backend_req_limit_per_ip burst=20 nodelay;
        proxy_pass http://backend;
        proxy_set_header X-Sendfile-Type X-Accel-Redirect;
        proxy_set_header X-Accel-Mapping /=/; # this header is required, it does nothing
        include    /etc/nginx/templates/myapp_proxy.conf;
    }


0 commentaires