Search code examples
reverse-proxytraefik

Traefik v2 as a reverse proxy without docker


I have read the documentation but I can not figure out how to configure Traefik v2 to replace Nginx as a reverse proxy for web sites (virtual hosts) without involving Docker. Ideally there would be let'sencrypt https as well.

I have a service running at http://127.0.0.1:4000 which I would like to reverse proxy to from http://myhost.com:80

This is the configuration i've come up with so far:

[Global]
checkNewVersion = true

[log]
  level = "DEBUG"
  filePath = "log-file.log"

[accessLog]
  filePath =  "log-access.log"
  bufferingSize =  100

[entrypoints]
    [entrypoints.http]
    address = ":80"

[http]
    [http.routers]
       [http.routers.my-router]
          rule = "Host(`www.myhost.com`)"
          service = "http"
          entrypoint=["http"]

    [http.services]
          [http.services.http.loadbalancer]
            [[http.services.http.loadbalancer.servers]]
              url = "http://127.0.0.1:4000"


Solution

  • I figured it out, the first part to note is that in traefik v2 there are two types of configuration, static and dynamic. So I created two files, traefik.toml and traefik-dynamic.toml.

    contents of traefik.toml:

    [log]
      level = "DEBUG"
      filePath = "log-file.log"
    
    [accessLog]
      filePath =  "log-access.log"
      bufferingSize =  100
    
    [providers]
      [providers.file]
        filename = "traefik-dynamic.toml"
    
    [api]
      dashboard = true
      debug = true
    
    [entryPoints]
      [entryPoints.web]
        address = ":80"
      [entryPoints.web-secure]
        address = ":443"
      [entryPoints.dashboard]
        address = ":8080"
    
    [certificatesResolvers.sample.acme]
      email = "[email protected]"
      storage = "acme.json"
    
      [certificatesResolvers.sample.acme.httpChallenge]
        # used during the challenge
        entryPoint = "web"

    traefik-dynamic.toml:

    [http]
        # Redirect to https
        [http.middlewares]
          [http.middlewares.test-redirectscheme.redirectScheme]
            scheme = "https"
    
        [http.routers]
           [http.routers.my-router]
              rule = "Host(`www.example.com`)"
              service = "phx"
              entryPoints = ["web-secure"]
           [http.routers.my-router.tls]
              certResolver = "sample"
    
        [http.services]
              [http.services.phx.loadbalancer]
                [[http.services.phx.loadbalancer.servers]]
                  url = "http://127.0.0.1:4000"