Pliant talk forum

Pliant talk forum

Discussion: User ip and vhosts through apache proxy

Two usefull functions if you run pliant http server
behind apache
Message posted by borisr_eitman on 2007/02/05 03:08:20
This may be usefull to someone who wants to keep track of visitor statistics.

In my setup, I have the same pliant code serving several websites.  
The pliant server is proxied by apache, so pliant thinks all users come from 
same ip and same domain name.  In fact, I proxy: 

  www.XXX.com:80 and secure.XXX.com:441 on apache 
  to site XXX.com:8080 running pliant.

The get_via_host function helps me to decide if I am in "secure" mode, 
while get_user_ip will give the ip.

To make this code work enable ProxyVia in apache:  "ProxyVia On"

method page get_via_host -> via
  arg HtmlPage page
  arg Str via
  via := ""
  implicit page
    var Pointer:Arrow a :> http_request:query_log first
    var Str string := "Via: "
    while a<>null
      if ((a map Str) 0 4) = "Via:"
        var Str tmp := (a map Str)
        tmp := (tmp string:len tmp:len - string:len)
        #console "Got via header = " tmp eol
        tmp parse any _ any:via 
        return
      a :> http_request:query_log next a

method page get_user_ip -> ip
  arg HtmlPage page
  arg Str ip
  ip := ""
  implicit page 
    var Pointer:Arrow a :> http_request:query_log first
    var Str string := "X-Forwarded-For: "
    var Int length := string:len-1
    while a<>null 
      if ((a map Str) 0 length) = "X-Forwarded-For:"
        var Str tmp := (a map Str) 
        ip := (tmp string:len tmp:len - string:len)
        #console "Got user ip = [dq]" ip "[dq]" eol
        return
      a :> http_request:query_log next a