配置LXC添加X-Forwarded-For头以获取客户端真实IP
问题描述
我有一台部署了多个LXC容器的服务器,将服务器8080端口的请求转发至LXC容器的80端口,使用的命令如下:
lxc profile create proxy-8080 lxc profile list # first create a profile bound to the future local host lxc profile device add proxy-8080 hostport8080 proxy connect="tcp:127.0.0.1:80" listen="tcp:0.0.0.0:8080" # then attach profil to container lxc profile add dev proxy-8080
目前转发功能正常,但容器内无法获取客户端真实IP,始终显示127.0.0.1,请问如何配置以添加X-Forwarded-For头,让容器能获取到真实IP?
解决方案
LXC原生的proxy设备不支持添加HTTP请求头,要实现传递真实IP并添加X-Forwarded-For头,有两种可行方案:
方案一:用Nginx反向代理替代LXC proxy设备
这是最直接且易维护的方案:
- 在宿主机安装Nginx
- 编写Nginx反向代理配置,示例如下:
server { listen 8080; server_name _; location / { proxy_pass http://<容器实际IP>:80; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } }
- 移除之前创建的LXC proxy配置:
lxc profile remove dev proxy-8080 lxc profile delete proxy-8080
- 重启Nginx服务使配置生效
方案二:容器内配合信任代理(需额外轻量代理辅助)
如果要保留LXC proxy的使用,需要额外在宿主机部署轻量代理(如haproxy)来添加X-Forwarded-For头,同时容器内Web服务需信任代理请求:
- 修改LXC proxy的目标地址为容器的外部可访问IP,而非127.0.0.1:
lxc profile device set proxy-8080 hostport8080 connect="tcp:<容器实际IP>:80"
- 在宿主机部署haproxy,配置添加X-Forwarded-For头并转发到容器80端口,同时将LXC proxy的监听端口调整为haproxy的监听端口
- 在容器内的Web服务中配置信任代理:
- Nginx需添加:
real_ip_header X-Forwarded-For; set_real_ip_from <宿主机IP>; - Apache需启用
mod_remoteip模块后添加:RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy <宿主机IP>
- Nginx需添加:
- 重启容器内的Web服务及宿主机haproxy服务
注:方案二配置步骤较多,不如方案一简洁,优先推荐方案一。
内容的提问来源于stack exchange,提问作者cellendhyll
相关产品推荐
相关产品推荐

