traefik返回404无条件转发到后端

时间:2017-12-15 12:59:56

标签: traefik

我想无条件地将所有请求转发到后端,但是当我尝试访问它时,我会继续获得404.这是我的配置。

搬运工-compose.yml

version: '3.3'
services:
  load-balancer:
    image: traefik:1.5-alpine
    ports:
      - 8080:80
    volumes:
      - ./traefik:/etc/traefik
  server1:
    build: server1
    ports:
      - 8081:80

traefik.toml

defaultEntryPoints = ["http"]
debug = true
logLevel = "DEBUG"
[accessLog]

[entryPoints.http]
address = ":80"

[frontends.dummy]
backend = "dummy"
entrypoints = ["http"]
[frontends.dummy.routes.all]
rule = "PathPrefix:/"

[backends.dummy.servers.server1]
url = "http://server1:80"

我可以从http://server1容器内的localhost:8081和load-balancer访问server1而没有任何问题。但是localhost:8080一直在返回404

调试日志

load-balancer_1  | time="2017-12-15T12:56:09Z" level=info msg="Using TOML configuration file /etc/traefik/traefik.toml"
load-balancer_1  | time="2017-12-15T12:56:09Z" level=info msg="Traefik version v1.5.0-rc2 built on 2017-12-06_03:07:42PM"
load-balancer_1  | time="2017-12-15T12:56:09Z" level=info msg="
load-balancer_1  | Stats collection is disabled.
load-balancer_1  | Help us improve Traefik by turning this feature on :)
load-balancer_1  | More details on: https://docs.traefik.io/basic/#collected-data
load-balancer_1  | "
load-balancer_1  | time="2017-12-15T12:56:09Z" level=debug msg="Global configuration loaded {"LifeCycle":{"RequestAcceptGraceTimeout":0,"GraceTimeOut":0},"GraceTimeOut":0,"Debug":true,"CheckNewVersion":true,"SendAnonymousUsage":false,"AccessLogsFile":"","AccessLog":{"format":"common"},"TraefikLogsFile":"","TraefikLog":null,"LogLevel":"DEBUG","EntryPoints":{"http":{"Network":"","Address":":80","TLS":null,"Redirect":null,"Auth":null,"WhitelistSourceRange":null,"Compress":false,"ProxyProtocol":null,"ForwardedHeaders":{"Insecure":true,"TrustedIPs":null}}},"Cluster":null,"Constraints":[],"ACME":null,"DefaultEntryPoints":["http"],"ProvidersThrottleDuration":2000000000,"MaxIdleConnsPerHost":200,"IdleTimeout":0,"InsecureSkipVerify":false,"RootCAs":null,"Retry":null,"HealthCheck":{"Interval":30000000000},"RespondingTimeouts":null,"ForwardingTimeouts":null,"Web":null,"Docker":null,"File":null,"Marathon":null,"Consul":null,"ConsulCatalog":null,"Etcd":null,"Zookeeper":null,"Boltdb":null,"Kubernetes":null,"Mesos":null,"Eureka":null,"ECS":null,"Rancher":null,"DynamoDB":null,"ServiceFabric":null,"Rest":null,"API":null,"Metrics":null,"Ping":null}"
load-balancer_1  | time="2017-12-15T12:56:09Z" level=info msg="Preparing server http &{Network: Address::80 TLS:<nil> Redirect:<nil> Auth:<nil> WhitelistSourceRange:[] Compress:false ProxyProtocol:<nil> ForwardedHeaders:0xc42060ea60} with readTimeout=0s writeTimeout=0s idleTimeout=3m0s"
load-balancer_1  | time="2017-12-15T12:56:09Z" level=info msg="Starting server on :80"
load-balancer_1  | 172.21.0.1 - - [15/Dec/2017:12:56:17 +0000] "GET / HTTP/1.1" - - - "curl/7.54.0" 1 - - 0ms

最后一次访问日志来自命令

curl localhost:8080                                                                                                                                                                                                                                               

然后它返回

404 page not found

我不想使用docker后端,只是想让traefik从容器中执行传统的循环操作。我想知道它是否可能?

1 个答案:

答案 0 :(得分:1)

好吧,加入懒散后,Machael Matul指出你需要 [file]在入口点之后的某处宣布

<option>

并且对于后端工作,它必须在前端的路由声明之前。 例如:

[file]

完成示例:

[frontends]
  [frontends.frontend1]
  backend = "buffalo"
    [frontends.frontend1.routes.web]
    rule = "Host:xyz.com"
  entrypoints = ["http","https"]