Nginx 监听 unix sock 的时候如何获取客户端的真实 IP?

2019-09-09 17:08:19 +08:00
 mashirozx

用这边先用 stream 模块做负载均衡,然后通过 unix sock 反代后端的 server,但是这时后端记录的 example.com 日志里,访问的 IP 都是 unix: - -

我的疑问:
1.当 server listen 的不是 80、443 之类的端口,而是 unix sock 的时候如何获取客户端的真实 IP ?
2.如果需要 stream 模块传递真实 IP,应当怎样写?

这是完整的日志:

unix: - - [09/Sep/2019:16:50:56 +0800] "GET /v1/sss HTTP/1.1" "404" 118 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36" "-" "-" 0.350 382 685

这是我的 Nginx 配置(大意):

stream {
    server {
        listen 443;
        proxy_protocol on;
        proxy_pass  unix:/dev/shm/localweb.sock;
        ssl_preread on;
    }
}


http 
{
	server 
    {
    	listen unix:/dev/shm/localweb.sock ssl proxy_protocol;
    	server_name example.com;
        
        access_log /var/log/nginx/access.log main;
		error_log /var/log/nginx/error.log;
    }
}

3178 次点击
所在节点    NGINX
5 条回复
ragnaroks
2019-09-09 17:28:19 +08:00
server 里面传递 x-real-ip
xhcnb
2019-09-09 17:28:32 +08:00
X-Forwarded-For
skyqqcc
2019-09-09 17:29:57 +08:00
全部都是 dump 出来,再看就知道是哪个了。。
bearice
2019-09-09 17:30:59 +08:00
stream 是 4 层代理,HTTP 头就不用想了,可以用 proxy_protocol
Aruforce
2019-09-09 17:32:28 +08:00
uinix socket 是系统内进程通信吧... 有 IP 这样的概念?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX