首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Traefik码头客群模式背后的Nginx实ip

Traefik码头客群模式背后的Nginx实ip
EN

Stack Overflow用户
提问于 2017-06-19 21:04:45
回答 1查看 8.9K关注 0票数 6

我使用Traefik作为一个反向代理,在码头群环境中的nginx服务面前。这是我的码头-stack.yml

代码语言:javascript
复制
traefik:
    image: traefik
    command: -c /dev/null --web --docker --docker.swarmmode --docker.watch --docker.domain=domain --logLevel=DEBUG
    ports:
      - "8080:8080"
      - "80:80"
      - "443:443"
    networks:
       - app
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints: [node.role == manager]

nginx:
    image: nginx
    networks:
      - app
    deploy:
      labels:
        traefik.port: 80
        traefik.docker.network: app
        traefik.frontend.rule: "Host:app.domain"

一切正常,但我需要Nginx访问日志中真正的客户机IP,而不是10.0.1.37这样的东西。

我怎么能得到真正的客户ip?

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2017-06-20 09:01:14

这个问题在github #614上进行了讨论。

当上游服务接收到来自Traefik的请求时,X-Forwarded-For报头包含来自覆盖网络的IP地址,而不是实际的客户端地址。

要克服这一问题,您可以使用新的)方法。

然后,确保traefik连接到主机网络,并发送正确的X-Forwarded-For头(参见下面的mode: host中的80端口):

代码语言:javascript
复制
version: "3.2"
services:
  traefik:
    ...
    ports:
      - "8080:8080"
      - target: 80
        published: 80
        protocol: tcp
        mode: host
      - "443:443"
    ...

最后,您必须更改http {} section中的nginx http {} section。这可以通过nginx.conf配置文件的卷绑定来完成:

代码语言:javascript
复制
nginx:
  ..
  volumes:
    - /data/nginx/nginx.conf:/etc/nginx/nginx.conf

你会有这样的nginx.conf

代码语言:javascript
复制
http {
  ...
  log_format main '$http_x_forwarded_for - $remote_user [$time_local] '
  '"$request" $status $body_bytes_sent "$http_referer" '
  '"$http_user_agent"' ;

在AWS ec2上进行测试后,traefik_nginx服务(我调用了堆栈traefik)日志如下:

代码语言:javascript
复制
$ docker service logs -f traefik_nginx
...
traefik_nginx.1.qpxyjheql5uk@xxx    | 82.253.xxx.xxx - - [20/Jun/2017:08:46:51 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36"
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44639958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档