>>>Removing the service holding the redirect from the HTTP listener, resolves 
>>>nothing.  In >>>fact, everything breaks.

At that point, if you connect to https://dev2, what happens?  Clearly 
http://dev2 will not work in that case.

Joe

From: Shane Chambers [mailto:[email protected]]
Sent: Thursday, March 15, 2012 6:16 PM
To: [email protected]
Subject: ***SPAM*** [Pound Mailing List] Pound private services

I’ve run into a problem that I’m hoping someone can explain to me.  It appears 
that pound is treating HTTP private services as global services, and ignoring 
HTTPS private services.  Take for example this configuration;


root@dev2: cat /etc/pound.cfg
User        "nobody"
Group       "nobody"
RootJail    "/var/pound/jail"
Alive       15
Client      15
TimeOut     300
Grace       10
LogFacility     local6
LogLevel        2
Control         "/var/run/pound.control"

## Main listening ports
ListenHTTP
    Address 192.168.3.120
    Port    80
        MaxRequest 10485760
    xHTTP       0


        Service
                Redirect "https://dev2";
        End
End

ListenHTTPS
    Address 192.168.3.120
    Port    443
        MaxRequest 10485760
    Cert    <removed>
    xHTTP       0



        Service
                IgnoreCase 1
                URL "^\/*\/<removed>"
                BackEnd
                        Address 192.168.3.120
                        Port 8080
                End
        End
        Service
                IgnoreCase 1
                URL "^\/*\/<removed>"
                BackEnd
                        Address 192.168.3.120
                        Port 8068
                End
        End
        Service
                BackEnd
                        Address 192.168.3.120
                        Port 81
                End
        End

End


root@dev2: poundctl -c /var/run/pound.control
  0. http Listener 192.168.3.120:80 a
    0. Service active (1)
      0. Backend (UNKNOWN):0 active (1 0.000 sec) alive
  1. HTTPS Listener 192.168.3.120:443 a
    0. Service active (5)
      0. Backend 192.168.3.120:8080 active (5 0.000 sec) alive
    1. Service active (5)
      0. Backend 192.168.3.120:8068 active (5 0.000 sec) alive
    2. Service active (5)
      0. Backend 192.168.3.120:81 active (5 0.000 sec) alive
 -1. Global services


This was written with the intention of all HTTP traffic to be redirected to 
HTTPS traffic.  Indeed, from the headers I can see that all HTTP traffic is 
being redirected, however, all HTTPS traffic is being redirected as well.  Thus 
I’ve got an infinite loop...

http://dev2/

GET / HTTP/1.1
Host: dev2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 
Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: ad_session_id=<removed>

HTTP/1.0 302 Found
Location: https://dev2/
Content-Type: text/html
Content-Length: 144
----------------------------------------------------------
https://dev2/

GET / HTTP/1.1
Host: dev2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 
Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: ad_session_id=<removed>

HTTP/1.0 302 Found
Location: https://dev2/
Content-Type: text/html
Content-Length: 144
----------------------------------------------------------
https://dev2/

GET / HTTP/1.1
Host: dev2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 
Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: ad_session_id=<removed>

HTTP/1.0 302 Found
Location: https://dev2/
Content-Type: text/html
Content-Length: 144

ad infinitum…


Removing the service holding the redirect from the HTTP listener, resolves 
nothing.  In fact, everything breaks.

ListenHTTP
    Address 192.168.3.120
    Port    80
        MaxRequest 10485760
    xHTTP       0


#       Service
#               Redirect "https://dev2";
#       End
End

root@dev2: poundctl -c /var/run/pound.control
  0. http Listener 192.168.3.120:80 a
  1. HTTPS Listener 192.168.3.120:443 a
    0. Service active (5)
      0. Backend 192.168.3.120:8080 active (5 0.000 sec) alive
    1. Service active (5)
      0. Backend 192.168.3.120:8068 active (5 0.000 sec) alive
    2. Service active (5)
      0. Backend 192.168.3.120:81 active (5 0.000 sec) alive
 -1. Global services

https://dev2/

GET / HTTP/1.1
Host: dev2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 
Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: ad_session_id=<removed>

HTTP/1.0 503 Service Unavailable
Content-Type: text/html
Content-Length: 53
Expires: now
Pragma: no-cache
Cache-Control: no-cache,no-store
----------------------------------------------------------


It’s not until the services under HTTPS are moved out to the global definition 
that things begin working again;

root@dev2: poundctl -c /var/run/pound.control
  0. http Listener 192.168.3.120:80 a
  1. HTTPS Listener 192.168.3.120:443 a
 -1. Global services
    0. Service active (5)
      0. Backend 192.168.3.120:8080 active (5 0.000 sec) alive
    1. Service active (5)
      0. Backend 192.168.3.120:8068 active (5 0.000 sec) alive
    2. Service active (5)
      0. Backend 192.168.3.120:81 active (5 0.000 sec) alive

https://dev2/

GET / HTTP/1.1
Host: dev2
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 
Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: ad_session_id=<removed>

HTTP/1.1 200 OK
Set-Cookie: ad_session_id=<removed>; Path=/; Max-Age=3600
MIME-Version: 1.0
Date: Thu, 15 Mar 2012 21:59:39 GMT
Server: AOLserver/4.5.1
Content-Type: text/html; charset=utf-8
Content-Length: 5847
Connection: keep-alive
----------------------------------------------------------


Why does the private service under HTTP appear to be treated like it’s a global 
service (or at least a private service for both HTTP, and HTTPS)?
Why are the private services under HTTPS appearing to not be seen at all?
Is there a better way to implement HTTP to HTTPS redirection?  (or at least a 
work around for this problem?)

Reply via email to