gpt4 book ai didi

java - 如何使用 Nginx 作为反向代理在 gRPC Java 服务器端获取真实客户端 IP

转载 作者:行者123 更新时间:2023-12-02 10:49:22 28 4
gpt4 key购买 nike

我使用grpc-java作为服务器后端,Nginx作为服务器和客户端之间的负载均衡器,现在我可以像这样获取请求元数据

Metadata(content-type=application/grpc,user-agent=grpc-java-netty/1.12.0,grpc-accept-encoding=gzip,grpc-trace-bin=)

和客户端IP通过Grpc.TRANSPORT_ATTR_REMOTE_ADDR像这样

{remote-addr=/10.10.10.202:54031}

显然是Nginx节点的本地IP。我已经在 nginx.conf 中设置了 X-Real-IP 和 X-Forwarded-For

...
server {
listen 50010 http2;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
...

这 2 个键应该出现在请求元数据中。有人可以帮我吗? CentOS 7.4上gRPC版本为1.12,nginx版本为1.15.2

最佳答案

在 Java 中,您可以通过查看 ServerCall 的元数据来访问所有 header 。元数据和 header 是同一回事。通常,StreamObserver 不会向您公开此信息,因为大多数用户不关心 header 。

就您而言,您可以使用ServerInterceptor来访问元数据。公开这一点的正确方法是从元数据中提取正确的 header 并将其放入 Context 中。上下文的范围仅限于 ServerCall,并且可以在拦截器外部访问。在服务器处理程序中,您可以调用 Context.current() 并使用用于将 header 放入上下文中的 Context.Key 来获取值。

关于java - 如何使用 Nginx 作为反向代理在 gRPC Java 服务器端获取真实客户端 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287105/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com