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