Nginx代理Docker应用显示Docker网络IP而非用户真实IP求助
问题:Docker环境下Nginx反向代理后无法获取用户真实IP
不使用Nginx时,应用能正常获取用户真实的10.xxx.xx.xx IP;但通过Nginx反向代理后,应用显示的IP变成了Docker容器网络的192开头地址,尝试过现有解决方案均无效。
当前Nginx配置
server { listen 80; location ~* ^/websiteName/ { real_ip_recursive on; # Strip the prefix and then proxy pass rewrite ^/websiteName/(.*)$ $1 break; proxy_pass http://imt_webapp:5000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Header-Test "X-Forwarded-For - $proxy_add_x_forwarded_for"; proxy_set_header X-Header-Test "X-Real-IP - $remote_addr"; } }
当前返回的IP信息
X-Real-Ip: 192.168.144.1 X-Forwarded-For: 192.168.144.1
Docker网络相关信息
执行命令:
docker ps -q | xargs -n 1 docker inspect -f '{{.Name}} 0 {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
输出结果:
/{{container-name}}-nginx-1 0 192.168.144.3 /{{container-name}}-imt_webapp-1 0 192.168.144.2
docker-compose.yml配置
version: '3.8' services: imt_webapp: build: ./src/ volumes: - ./src/:/usr/src/app/ ports: - ${FLASK_PORT}:5000 environment: PORT: 5000 FLASK_DEBUG: 1 networks: - mynet imt_database: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DATABASE_PASSWORD} MYSQL_DATABASE: ${DATABASE_NAME} ports: - "${DATABASE_PORT}:3306" volumes: - imt-mysql-data:/var/lib/mysql networks: - mynet nginx: image: nginx:latest ports: - "80:80" volumes: - ./nginx:/etc/nginx/conf.d networks: - mynet volumes: imt-mysql-data: networks: mynet: external: False
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

