[pkg-lighttpd] Bug#395342: Debian lighttpd.conf not compatible with "ruby on rails" app 1.1.6 when its public/image directory is accessed

dllm70-boborosso at yahoo.com dllm70-boborosso at yahoo.com
Thu Oct 26 13:15:34 UTC 2006


package:lighttpd
version: 1.4.13-2


Installed rails from rubygems and deployed an app. Rails app works but I couldn't access static content in (application path)/public/images even if permissions check.

lighttpd displays the app-configured 404 page and rails logs utter:

ActionController::RoutingError (Recognition failed for "/images/rails.png"):
    /var/lib/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/routing.rb:522:in `recognition_failed'
    /var/lib/gems/1.8/gems/actionpack-1.12.5/lib/action_controller/routing.rb:512:in `recognize!'
    /var/lib/gems/1.8/gems/rails-1.1.6/lib/dispatcher.rb:38:in `dispatch'
    /var/lib/gems/1.8/gems/rails-1.1.6/lib/fcgi_handler.rb:150:in `process_request'
    /var/lib/gems/1.8/gems/rails-1.1.6/lib/fcgi_handler.rb:54:in `process!'
    /usr/lib/ruby/1.8/fcgi.rb:612:in `each_cgi'
    /usr/lib/ruby/1.8/fcgi.rb:609:in `each'
    /usr/lib/ruby/1.8/fcgi.rb:609:in `each_cgi'
    /var/lib/gems/1.8/gems/rails-1.1.6/lib/fcgi_handler.rb:53:in `process!'
    /var/lib/gems/1.8/gems/rails-1.1.6/lib/fcgi_handler.rb:23:in `process!'
    /var/www/AreaSezione/public/dispatch.fcgi:24

In fact renaming images to something else makes content accessible (breaking the rails app). The problems seems to be in this part of debian lighttpd.conf: 

#### handle Debian Policy Manual, Section 11.5. urls
#### and by default allow them only from localhost

$HTTP["host"] == "localhost" {
        global {
                alias.url += (
                        "/doc/" => "/usr/share/doc/",
                        "/images/" => "/usr/share/images/
                )
        }
        dir-listing.activate = "enable"
}


if I remove it or change "images" to something else, images dir becomes accessible again (and there is much rejoicing :) ).


Of course it could be not a bug, just me misconfiguring lighttpd, or dns. DNS has an A record for the app exclusive hostname to the server ip.
$ dig areasezione.no-ip.org

; <<>> DiG 9.3.2-P1 <<>> [domainfortheapp]
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38457
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;[domainfortheapp].         IN      A

;; ANSWER SECTION:
[domainfortheapp].  60      IN      A       [IPfortheapp]


 And here is the Not Working lighttpd.config

# Debian lighttpd configuration file
#

############ Options you really have to take care of ####################

## modules to load
# mod_access, mod_accesslog and mod_alias are loaded by default
# all other module should only be loaded if neccesary
# - saves some time
# - saves memory

server.modules              = (
        "mod_fastcgi",
            "mod_access",
            "mod_alias",
            "mod_accesslog",
           "mod_rewrite",
#           "mod_redirect",
#           "mod_status",
#           "mod_evhost",
           "mod_compress",
#           "mod_usertrack",
#           "mod_rrdtool",
#           "mod_webdav",
           "mod_expire",
#           "mod_flv_streaming",
#           "mod_evasive"
 )

## a static document-root, for virtual-hosting take look at the
## server.virtual-* options
server.document-root       = "/var/www/"

## where to send error-messages to
server.errorlog            = "/var/log/lighttpd/error.log"

## files to check for if .../ is requested
index-file.names           = ( "index.php", "index.html",
                               "index.htm", "default.htm" )


## Use the "Content-Type" extended attribute to obtain mime type if possible
# mimetype.use-xattr = "enable"

#### accesslog module
accesslog.filename         = "/var/log/lighttpd/access.log"

## deny access the file-extensions
#
# ~    is for backupfiles from vi, emacs, joe, ...
# .inc is often used for code includes which should in general not be part
#      of the document-root
url.access-deny            = ( "~", ".inc" )



######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
#server.port               = 81

## bind to localhost only (default: all interfaces)
server.bind                = "IPOFTHEAPP"

## error-handler for status 404
#server.error-handler-404  = "/error-handler.html"
#server.error-handler-404  = "/error-handler.php"

## to help the rc.scripts
server.pid-file            = "/var/run/lighttpd.pid"

##
## Format: <errorfile-prefix><status>.html
## -> ..../status-404.html for 'File not found'
#server.errorfile-prefix    = "/var/www/"

## virtual directory listings
dir-listing.encoding        = "utf-8"
server.dir-listing          = "disable"

## send unhandled HTTP-header headers to error-log
#debug.dump-unknown-headers  = "enable"

### only root can use these options
#
# chroot() to directory (default: no chroot() )
#server.chroot            = "/"

## change uid to <uid> (default: don't care)
server.username            = "www-data"

## change uid to <uid> (default: don't care)
server.groupname           = "www-data"

#### compress module
#compress.cache-dir          = "/var/tmp/lighttpd/cache/compress/"
#compress.filetype           = ("text/plain", "text/html")

#### status module
# status.status-url = "/server-status"
# status.config-url = "/server-config"

#### url handling modules (rewrite, redirect, access)
# url.rewrite                 = ( "^/$"             => "/server-status" )
# url.redirect                = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )

#
# define a pattern for the host url finding
# %% => % sign
# %0 => domain name + tld
# %1 => tld
# %2 => domain name without tld
# %3 => subdomain 1 name
# %4 => subdomain 2 name
#
#evhost.path-pattern = "/var/www/%2/htdocs/"

#### expire module
# expire.url                  = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")

#### rrdtool
# rrdtool.binary = "/usr/bin/rrdtool"
# rrdtool.db-name = "/var/www/lighttpd.rrd"

## this is a hack
alias.url = ("___invalid___" => "___invalid___")

#### handle Debian Policy Manual, Section 11.5. urls
#### and by default allow them only from localhost

$HTTP["host"] == "localhost" {
        global {
                alias.url += (
                        "/doc/" => "/usr/share/doc/",
                        "/images/" => "/usr/share/images/"
                )
        }
        dir-listing.activate = "enable"
}

#### variable usage:
## variable name without "." is auto prefixed by "var." and becomes "var.bar"
#bar = 1
#var.mystring = "foo"

## integer add
#bar += 1
## string concat, with integer cast as string, result: "www.foo1.com"
#server.name = "www." + mystring + var.bar + ".com"
## array merge
#index-file.names = (foo + ".php") + index-file.names
#index-file.names += (foo + ".php")


#### external configuration files
## mimetype mapping
include_shell "/usr/share/lighttpd/create-mime.assign.pl"

## load enabled configuration files,
## read /etc/lighttpd/conf-available/README first
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

# NOTE I REMOVED FCGI stuff from conf-enabled and put it in this file

# lighttpd.conf entry to transparently add ssl
$SERVER["socket"] == "IPFORTHEAPP:443" {
  ssl.pemfile = "...../key-cert.pem"
  ssl.ca-file = "....../cacert.pem"
  ssl.engine = "enable"
}


$HTTP["host"] =~ "(^|\.)URLFORTHEAPP$" {

server.error-handler-404 = "/dispatch.fcgi"
server.document-root     = "/var/www/app/public/"

server.errorlog          = "/var/www/app/log/lighttpd.error.log"
accesslog.filename       = "/var/www/app/log/lighttpd.access.log"

url.rewrite              = ( "^/$" => "index.html", "^([^.]+)$" => "$1.html" )

compress.filetype        = ( "text/plain", "text/html", "text/css", "text/javascript" )
compress.cache-dir       = "/var/www/AreaSezione/tmp/cache"

expire.url               = ( "/favicon.ico"  => "access 3 days",
                             "/images/"      => "access 3 days",
                             "/stylesheets/" => "access 3 days",
                             "/javascripts/" => "access 3 days" )




fastcgi.server      = ( ".fcgi" => ( "localhost" => (
  "min-procs"       => 1,
  "max-procs"       => 2,
  "socket"          => "/var/www/app/tmp/sockets/fcgi.socket",
  "bin-path"        => "/var/www/app/public/dispatch.fcgi",
  "bin-environment" => ( "RAILS_ENV" => "production" )
) ) )

}


$HTTP["useragent"] =~ "^(.*MSIE.*)|(.*AppleWebKit.*)$" {
  server.max-keep-alive-requests = 0
}



__________________________________________________
Do You Yahoo!?
Poco spazio e tanto spam? Yahoo! Mail ti protegge dallo spam e ti da tanto spazio gratuito per i tuoi file e i messaggi 
http://mail.yahoo.it 




More information about the pkg-lighttpd-maintainers mailing list