java - 如何使用 Nginx 作为反向代理在 gRPC Java 服务器端获取真实客户端 IP
问题描述
我使用 grpc-java 作为服务器后端,使用 Nginx 作为服务器和客户端之间的负载均衡器,现在我可以像这样获取请求元数据
Metadata(content-type=application/grpc,user-agent=grpc-java-netty/1.12.0,grpc-accept-encoding=gzip,grpc-trace-bin=)
和 Grpc.TRANSPORT_ATTR_REMOTE_ADDR 的客户端 IP 像这样
{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;
...
这两个键应该出现在请求元数据中。谁能帮帮我?在 CentOS 7.4 上 gRPC 的版本是 1.12,nginx 的版本是 1.15.2
解决方案
- 配置“grpc_set_header X-Real-IP $remote_addr;” 用于 grpc 的 nginx:grpc_set_header
server {
listen 9099 http2;
access_log /var/log/nginx/access-grpc.log;
location / {
grpc_pass grpc://127.0.0.1:9091;
grpc_set_header X-Real-IP $remote_addr;
}
}
从 gRPC 服务器端的上下文中获取元数据
我的golang代码:
md, ok := metadata.FromIncomingContext(ctx)
...
md.Get("x-real-ip")
...
推荐阅读
- javascript - Vue:组件中的输入表单不返回值
- gstreamer - 在 vlc 中查看 rtp vp8 流
- laravel - 发生错误时,laravel mix 编译会删除旧文件吗?
- excel - Excel Power Query - 如何在 power query 的同一个表中追加列?
- html - 图像扩展了 flex 父级的高度,但在 chrome 和 safari 中出现了奇怪的 hack
- c# - 如何从 div 标签中获取文本?
- linux - Linux 根据日期在特定日志文件中搜索特定文本
- laravel - 无法使用 laravel 创建“/home/zubair/htdocs/E-soft/cms/public/images”目录
- mysql - Django ORM加入单表
- angular - 我如何导出我自己的角度组件,并且可以在另一个项目中导入相同的组件