我使用下面的configuration在Docker容器中运行Nginx作为反向代理。 它基本上将请求redirect到运行在同一台机器上的另一个Docker容器
问题是访问日志中的输出指出了错误的客户端IP地址,具体来说,我得到了Docker主机172.17.0.1 IP地址:
172.17.0.1 - - [24/May/2016:19:50:18 +0000] "GET /admin/ HTTP/1.1" 200 19243 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0" "-"
我试图按照这个post关于set_real_ip_from指令的build议,但没有任何成功。
server { listen 8000 ssl; server_name example.com; access_log /var/log/nginx/host.access.log main; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.key; set_real_ip_from 172.17.0.1; real_ip_header X-Forwarded-For; real_ip_recursive on; proxy_set_header Host $host:$server_port; 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; location / { proxy_pass http://172.17.0.1:8100/; } }
我在这里错过了什么?
编辑:
我只是意识到其他人在这里和这里有一个类似的问题,但不幸的是没有解决scheme。
你需要在进行代理的机器上设置X-Forwarded-For头(不是X-Real-IP ,这更不是标准的),你需要告诉接收到的请求信任XFF头是合法的,因为它是来自知名的知识产权。 你在你的问题中的configuration只适用于一台机器,但它有两端需要的configuration。