Grade ist die neue Passenger-Version 2.2.0 erschienen, die nun auch Nginx unterstützt. Das war für mich die Schwelle, Nginx anzutesten und insgesamt ist es alles einfach, wie bei Phusion gewohnt:
# gem install passenger # passenger-install-nginx-module
Das war’s schon – fast. Das install-nginx-module lädt die Nginx-Source herunter, kompiliert sie und schreibt die Installation nach /opt/nginx. Das Passengermodul wird direkt eingebunden und man muss nur noch seine Hosts einpflegen:
Konfiguration
/opt/nginx/conf/nginx.conf:
passenger_pool_idle_time 0;
server {
listen 80;
root /var/www/tracks/public;
server_name tracks.int.bm.net tracks;
rails_env production;
passenger_enabled on;
}
Ein
/opt/nginx/sbin/nginx
startet den Server.
X-Accel-Redirect
Anders als der Apache unterstützt Nginx direktes Filestreaming über den “X-Accel-Redirect”-Header. FIXME: die Konfiguration für mein laufendes Railsprojekt klemmt an dieser Stelle leider noch – die folgende Konfiguration führt zu einer Fehlermeldung:
server {
listen 80;
root /var/www/pplpool/current/public;
server_name marsexpress.int.bm.net marsexpress;
rails_env production;
passenger_enabled on;
location /uploads/ {
internal;
root /;
}
}
1 2 3 4 5 6 7 8 9 10 |
def attachments @asset = QAttachment.find(params[:id]) if head(:x_accel_redirect => "#{@asset.public_filename}", :content_type => @asset.content_type, :content_disposition => "attachment; filename=#{URI.encode(@asset.filename)}") else send_file(@asset.public_filename, :type => @asset.content_type) end end |
Update vom 20.4.: Aus unklaren Gründen läuft meine mephisto-Installation (dieser Blog) mit der aktuellen nginx-Passenger-Combo nicht einwandfei – ich steige erstmal wieder auf den Apache um.