Amigos,
Quando olho os logs do Nginx, eu recebo apenas o IP dos container internos. Como eu posso configurar o swarm para enviar para o Nginx o IP original do usuário?
Obrigado
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Amigos,
Quando olho os logs do Nginx, eu recebo apenas o IP dos container internos. Como eu posso configurar o swarm para enviar para o Nginx o IP original do usuário?
Obrigado
Opa Emerson, tudo bem?
Deixa eu confirmar se entendi. Você tem o nginx rodando dentro de um nó qualquer de um cluster e não quer pegar o IP dos nós, e sim da máquina host?
Olá Daniel, Obrigado pelo retorno. Eu preciso ter acesso ao IP original do usuário que esta acessando o meu ambiente.
Eu preciso salvar esses dados de acesso.. Como hora, path, IP, etc... Pego essas infos no log de acesso do Nginx, porem o IP que vem é do nodes internos.. O que eu preciso é que venha o IP original do usuário que acessou..
Exemplo:
| 10.0.24.144 - - [19/May/2020:07:24:42 +0000] "GET /media/kderno/files/2020/05/13/anigif_sub-buzz-22161-1512589653-2.gif HTTP/1.1" 200 997632 "http://localhost:3000/@lucas/kderno-de-lucas" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36" "10.0.0.2"onde vemos 10.0.24.144, deveríamos ver o IP real do usuario que esta acessando.
Qual comando você está executando para criar o nginx?
Estou usando docker swarm
version: '3.3'
services:
nginx:
image: nginx:latest
volumes:
- /mnt/data/images:/var/www/images
- /mnt/data/images:/var/www/media
networks:
- frontends
- traefik
logging:
driver: json-file
deploy:
replicas: 3
labels:
traefik.docker.network: traefik
traefik.enable: 'true'
traefik.http.routers.nginx.entrypoints: websecure
traefik.http.routers.nginx.rule: Host(`XXXX`)
traefik.http.routers.nginx.tls.certresolver: mytlschallenge
traefik.http.services.nginx.loadbalancer.server.port: '80'
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == manager
networks:
frontends:
external: true
traefik:
external: true
Uma possibilidade seria você utilizar apenas uma réplica para execução do serviço do nginx e fazer a publicação utilizando o modo host. Algo como:
ports:
- mode: host
....Caso realmente haja a necessidade de utilizar mais de uma réplica, você pode deixar a atribuição de portas de maneira randômica.