class Racknga::Middleware::NginxRawURI

NOTE: This is a middleware that restores the unprocessed URI client requests as is. Usually, nginx-passenger stack unescapes percent encoding in URI and resolve relative paths (ie “.” and “..”). Most of time, processed URI isn’t program. However, if you want to distinguish %2F (ie “/”) from “/”, it is.

Passenger 3.x or later is required.

Use this with following nginx configuration:

... {
   ...
   passenger_set_cgi_param HTTP_X_RAW_REQUEST_URI $request_uri;
}

Usage:

require "racknga"
use Racknga::Middleware::NginxRawURI
run YourApplication

Constants

RAW_REQUEST_URI_HEADER_NAME

Public Class Methods

new(application) click to toggle source
# File lib/racknga/middleware/nginx_raw_uri.rb, line 42
def initialize(application)
  @application = application
end

Public Instance Methods

call(environment) click to toggle source

For Rack.

# File lib/racknga/middleware/nginx_raw_uri.rb, line 47
def call(environment)
  raw_uri = environment[RAW_REQUEST_URI_HEADER_NAME]

  if raw_uri
    restore_raw_uri(environment, raw_uri)
  end

  @application.call(environment)
end

Private Instance Methods

restore_raw_uri(environment, raw_uri) click to toggle source
# File lib/racknga/middleware/nginx_raw_uri.rb, line 58
def restore_raw_uri(environment, raw_uri)
  environment["PATH_INFO"] = raw_uri.split("?").first
  environment["REQUEST_URI"] = raw_uri
end