Search code examples
porthaproxy

Haproxy - Cannot setup the most basic proxy


Please, can somebody look at this config?

global
   log stdout  format raw  local0  debug
   stats timeout 30s

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 50000
   timeout client 50000
   timeout server 50000

frontend app
  bind *:15080
  default_backend myback

backend myback
  server site google.com:80 check

Why is this not working? If I try to visit 127.0.0.1:15080 it takes some time and then the url in a browser changes to www.google.com:16080 which obviously doesn't take you anywhere. The browser says: "This site can’t be reached - ERR_CONNECTION_TIMED_OUT".

So why doesn't it proxy to port 80 as one would expect?

The log entry does not tell much:

127.0.0.1:50871 [01/Jul/2019:14:39:45.879] app myback/site 0/0/20/84/104 301 681 - - ---- 2/2/0/0/0 0/0 "GET / HTTP/1.1"

Haproxy version:

HA-Proxy version 2.0.0-4fb65f-8 2019/06/19 - https://haproxy.org/

EDIT:

I somehow solved the problem by trial & error..


Solution

  • Actually, HAProxy is working as expected and proxying your request to google. Google, however, sees that the host header is 'Host: 127.0.0.1:15080', and responds with a 301 redirect to www.google.com:15080. You can see this without setting up HAProxy by doing:

    $ curl -I -H 'Host: 127.0.0.1:15080' google.com
    HTTP/1.1 301 Moved Permanently
    Location: http://www.google.com:15080/
    Content-Type: text/html; charset=UTF-8
    Date: Mon, 01 Jul 2019 14:26:09 GMT
    Expires: Wed, 31 Jul 2019 14:26:09 GMT
    Cache-Control: public, max-age=2592000
    Server: gws
    Content-Length: 225
    X-XSS-Protection: 0
    X-Frame-Options: SAMEORIGIN
    
    

    If you want to set up a very basic proxy to google, you need to make sure your host header matches and that you are sending requests via https.

    backend myback
      http-request set-header Host www.google.com
      server site google.com:443 ssl verify none check