我想在以下场景中将客户端ip放在服务器Y上,
客户端请求服务器X将服务器转发给服务器Y.
返回流程为Y-> X->客户端
http头中的更新
X有一个公共IP。 Y位于私人网络中,无法在外部访问。现在我在同一个私人网络中使用客户端,我通过公共网络请求X.
我只是想知道标题是否已经具有我需要的内容而不需要在X处操作标题以包含客户端的IP。
答案 0 :(得分:2)
如果您的应用程序位于代理后面,则请求的远程地址将显示给您的应用程序,而不是实际的客户端。
http规范中没有规定传递“真实”地址,但执行此操作的事实标准是将代理设置为X-Forwarded-For header
Werkzeug提供fixer来帮助解决这个问题,Flask docs中详细介绍了一个示例,request.remote_addr
应该是您期望的
答案 1 :(得分:0)
尽管你声称,X基本上是一个代理,因为它根据用户提出的请求向Y发出自己的请求。因此,REMOTE_ADDR
是X中的一个是完全有效的。
您必须向X的请求添加自定义标头,例如X-Original-User-IP
以使用户的IP可用于Y.如果需要,可以使用ProxyFix
,它将重写{{1转到X-Forwarded-For
您应确保Y仅对X可用且无法直接访问。否则,只需发送自定义标头就可以欺骗他的IP地址。