Ich betreibe eine Rails 3 Seite auf Ubuntu 8.04 mit Nginx 1.0.0 und Passenger 3.0.7.
In meinem Nginx error.log habe ich die Nachricht X-Accel-Mapping header missing
ziemlich oft gesehen. Googeln führt mich zu den Dokumenten von Rack::Sendfile
und zum Nginx-Dokumente .
Nun kann meine App über mehrere Domains erreicht werden und ich benutze send_file
in meiner App, um einige Dateien zu liefern, die für die Domain spezifisch sind, von der sie angefordert werden, zB wenn du zu domain1.com/favicon.ico
kommst in public/websites/domain1/favicon.ico
.
Das funktioniert gut und ich glaube nicht, dass ich Nginx involvieren muss oder möchte und erstelle einen privaten Bereich, in dem ich diese Dateien ablege, wie die Beispiele in der Rack::Sendfile
docs vorschlagen.
Wie kann ich die Fehlermeldung loswerden?
Diese Nachricht bedeutet, dass Rack::Sendfile
deaktiviert X-Accel-Redirect
für Sie ist, weil Sie in nginx.conf ... keine Konfiguration dafür haben ...
Ich benutze Nginx + Passagier 3 + Rails 3.1 .
Informationen von diesen Seiten gesammelt Ich habe es herausgefunden:
Große Dateien über Nginx bereitstellen via Rails 2.3 Verwendung von x-sendfile
Ich habe einen Controller, der /download/1
-Anfragen auf Speicherdateien ablegt, die eine eigene Verzeichnisstruktur haben, zB: storage/00/00/1
, storage/01/0f/15
usw. Also muss ich dies über Rails weitergeben, aber dann muss ich% verwenden co_de% Methode, die send_file
verwendet, um die endgültige Datei an den Browser über nginx direkt zu senden.
Innerhalb des Codes habe ich Folgendes:
%Vor%Ich habe den Dateinamen für dieses Beispielzwecke ersetzt
Nun musste ich diese Zeilen zu meinem X-Accel-Redirect
hinzufügen:
Der Pfad nginx.conf
ist von der Außenwelt nicht sichtbar, er ist nur intern.
/storage
erhält den Header Rack::Sendfile
, extrahiert den Pfad daraus und ersetzt X-Accel-Mapping
durch /var/www/shared/storage
. Dann spuckt es den modifizierten Header aus:
wird dann von nginx verarbeitet.
Ich kann sehen, dass dies korrekt funktioniert, da die Datei 100x schneller als zuvor heruntergeladen wird und in den Protokollen kein Fehler angezeigt wird.
Hoffe, das hilft.
Wir haben die ähnliche Technik wie NoICE beschrieben, aber ich ersetzte das "hart codierte" Verzeichnis, das alle Dateien mit dem regulären Ausdruck enthält, der den Ordner beschreibt, der die Ordner enthält, die die Dateien enthalten / em>.
Klingt schwer, ja? Schauen Sie sich diese an ( /etc/nginx/sites-available/my.web.site
):
Dies sollte mit dieser Überprüfung verwendet werden:
%Vor%um die Statik von der Rails-Verarbeitung zu verhindern.
Tags und Links nginx rack sendfile x-sendfile