aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/gems/rack-1.1.0/lib/rack/sendfile.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/rack-1.1.0/lib/rack/sendfile.rb')
-rw-r--r--vendor/gems/rack-1.1.0/lib/rack/sendfile.rb142
1 files changed, 0 insertions, 142 deletions
diff --git a/vendor/gems/rack-1.1.0/lib/rack/sendfile.rb b/vendor/gems/rack-1.1.0/lib/rack/sendfile.rb
deleted file mode 100644
index 4fa829462..000000000
--- a/vendor/gems/rack-1.1.0/lib/rack/sendfile.rb
+++ /dev/null
@@ -1,142 +0,0 @@
-require 'rack/file'
-
-module Rack
- class File #:nodoc:
- alias :to_path :path
- end
-
- # = Sendfile
- #
- # The Sendfile middleware intercepts responses whose body is being
- # served from a file and replaces it with a server specific X-Sendfile
- # header. The web server is then responsible for writing the file contents
- # to the client. This can dramatically reduce the amount of work required
- # by the Ruby backend and takes advantage of the web servers optimized file
- # delivery code.
- #
- # In order to take advantage of this middleware, the response body must
- # respond to +to_path+ and the request must include an X-Sendfile-Type
- # header. Rack::File and other components implement +to_path+ so there's
- # rarely anything you need to do in your application. The X-Sendfile-Type
- # header is typically set in your web servers configuration. The following
- # sections attempt to document
- #
- # === Nginx
- #
- # Nginx supports the X-Accel-Redirect header. This is similar to X-Sendfile
- # but requires parts of the filesystem to be mapped into a private URL
- # hierarachy.
- #
- # The following example shows the Nginx configuration required to create
- # a private "/files/" area, enable X-Accel-Redirect, and pass the special
- # X-Sendfile-Type and X-Accel-Mapping headers to the backend:
- #
- # location /files/ {
- # internal;
- # alias /var/www/;
- # }
- #
- # location / {
- # proxy_redirect false;
- #
- # proxy_set_header Host $host;
- # proxy_set_header X-Real-IP $remote_addr;
- # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- #
- # proxy_set_header X-Sendfile-Type X-Accel-Redirect
- # proxy_set_header X-Accel-Mapping /files/=/var/www/;
- #
- # proxy_pass http://127.0.0.1:8080/;
- # }
- #
- # Note that the X-Sendfile-Type header must be set exactly as shown above. The
- # X-Accel-Mapping header should specify the name of the private URL pattern,
- # followed by an equals sign (=), followed by the location on the file system
- # that it maps to. The middleware performs a simple substitution on the
- # resulting path.
- #
- # See Also: http://wiki.codemongers.com/NginxXSendfile
- #
- # === lighttpd
- #
- # Lighttpd has supported some variation of the X-Sendfile header for some
- # time, although only recent version support X-Sendfile in a reverse proxy
- # configuration.
- #
- # $HTTP["host"] == "example.com" {
- # proxy-core.protocol = "http"
- # proxy-core.balancer = "round-robin"
- # proxy-core.backends = (
- # "127.0.0.1:8000",
- # "127.0.0.1:8001",
- # ...
- # )
- #
- # proxy-core.allow-x-sendfile = "enable"
- # proxy-core.rewrite-request = (
- # "X-Sendfile-Type" => (".*" => "X-Sendfile")
- # )
- # }
- #
- # See Also: http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModProxyCore
- #
- # === Apache
- #
- # X-Sendfile is supported under Apache 2.x using a separate module:
- #
- # http://tn123.ath.cx/mod_xsendfile/
- #
- # Once the module is compiled and installed, you can enable it using
- # XSendFile config directive:
- #
- # RequestHeader Set X-Sendfile-Type X-Sendfile
- # ProxyPassReverse / http://localhost:8001/
- # XSendFile on
-
- class Sendfile
- F = ::File
-
- def initialize(app, variation=nil)
- @app = app
- @variation = variation
- end
-
- def call(env)
- status, headers, body = @app.call(env)
- if body.respond_to?(:to_path)
- case type = variation(env)
- when 'X-Accel-Redirect'
- path = F.expand_path(body.to_path)
- if url = map_accel_path(env, path)
- headers[type] = url
- body = []
- else
- env['rack.errors'] << "X-Accel-Mapping header missing"
- end
- when 'X-Sendfile', 'X-Lighttpd-Send-File'
- path = F.expand_path(body.to_path)
- headers[type] = path
- body = []
- when '', nil
- else
- env['rack.errors'] << "Unknown x-sendfile variation: '#{variation}'.\n"
- end
- end
- [status, headers, body]
- end
-
- private
- def variation(env)
- @variation ||
- env['sendfile.type'] ||
- env['HTTP_X_SENDFILE_TYPE']
- end
-
- def map_accel_path(env, file)
- if mapping = env['HTTP_X_ACCEL_MAPPING']
- internal, external = mapping.split('=', 2).map{ |p| p.strip }
- file.sub(/^#{internal}/i, external)
- end
- end
- end
-end