[araneida-devel] host header

Carlos Konstanski ckonstanski at pippiandcarlos.com
Wed Sep 20 04:41:37 UTC 2006


Perhaps you could register multiple listener translations for your
webapp.  When you set *listener*, the :translations keyword takes a
list of translations.  Each element of the :translations list is
itself a list of 2 strings, the first element being the
outside-visible URL and the second string being the URL as your lisp
code sees it.  Here is a barebones example where I translate a port 80
outside adress to a port 3000 inside address:

(setf *listener* make-instance #+araneida-uses-threads 'threaded-reverse-proxy-listener
                                #-araneida-uses-threads 'serve-event-reverse-proxy-listener
                                :translations `(("http://www.woodriverjewelry.com/" "http://www.woodriverjewelry.com:3000/")
                                                ("http://localhost/" "http://www.woodriverjewelry.com:3000/"))
                                :address #(127 0 0 1)
                                :port 3000)

In this example, www.woodriverjewelry.com resolves locally via my own
DNS server.  If I had no DNS server, I might just as easily have used
localhost as the inside address.

You could easily have more than one outside address map to the same
inside address.  You could have localhost be one of your outside
addresses, for example.  In this way, your lisp code would always see
the same inside address, while araneida would translate any number of
outside addresses for you.

This moves the URL mapping out of your code and into your config.  The
above example is a simplification of my code.  For the full deal, see:

http://static.woodriverjewelry.com/webapp-loader.lisp

Notice my listener :address is 127.0.0.1.  I use pound as my front-end
proxy.  Araneida is not exposed to the internet.  It listens only to
the loopback interface.  This is recommended, as araneida is not
nearly as hardened, battle-worn and scrutinized as pound or apache.
Between pound and apache, I pick pound for secureness.  It is far more
finicky about malformed requests.

If you use a reverse proxy, you will have to make your araneida webapp
the "default" for all requests that do not match a specific rule.
Here's my pound.cfg.  Notice that apache is the catch-all in my
config; you would reverse the roles, amd make araneida the catch-all:

User        "nobody"
Group       "nobody"
LogLevel    3
Alive       30
ListenHTTP
     Address 70.168.39.139
     Port    80
End

ListenHTTP
     Address 192.168.1.1
     Port    80
End

ListenHTTP
     Address localhost
     Port    80
End

Service
     HeadRequire "Host:.*www.woodriverjewelry.com.*"
     BackEnd
         Address localhost
         Port    3000
     End
     Session
         Type    BASIC
         TTL     300
     End
End

Service
     HeadRequire "Host:.*www.wrlug.org.*"
     BackEnd
         Address localhost
         Port    3000
     End
     Session
         Type    BASIC
         TTL     300
     End
End

Service
     # Catch All
     BackEnd
         Address localhost
         Port    81
     End
     Session
         Type    BASIC
         TTL     300
     End
End


Carlos Konstanski

On Wed, 20 Sep 2006, Johan Ur Riise wrote:

> Date: Wed, 20 Sep 2006 02:14:13 +0200
> From: Johan Ur Riise <johan at riise-data.no>
> To: araneida-devel at common-lisp.net
> Subject: [araneida-devel] host header
> 
> I have built an application with Araneida and it rocks.
>
> My problem:
> When I install a handler, I also give a host name
>
> like this:
>
> (defparameter *autotest-web-url*
>  (make-url :scheme "http" :host "lark.bg.axxessit.no" :port 80))
>
> (defparameter *listener*
>  (make-instance  'threaded-http-listener
> 		  :default-hostname "lark.bg.axxessit.no"
> 		  :port 8000))
>
> (install-handler (http-listener-handler *listener*)
>   (make-instance 'show-test-handler)
>   (merge-url *autotest-web-url* "/show-test") nil)
>
> (Yes, I did a trick with netfilter/iptables to forward port 80 so I can
> run Araneida under a normal user. But the problem would surface anyway)
>
> If my browser sends a different Host: -header, Araneida does not find a
> suitable handler. This happens if I use http://localhost/... or the
> short http://lark/... , and also when i use local forwarding via
> ssh from another machine (http://localhost:2080/...) Currently I
> install another handler for this (ahh, just saw that I can use the
> same handler and install it twice (thanks for letting me write this...))
>
> Anyway, is there a better way? Can I specify a set of names, or just
> let Araneida ignore the hostname and port?
>
> -- 
> Hilsen
> Johan Ur Riise
> _______________________________________________
> araneida-devel mailing list
> araneida-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/araneida-devel
>



More information about the Araneida-devel mailing list