[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