
我想统计不同域名的下行流量,TCP 协议
从 log 中读取 我本来想输出 log,然后从 log 中读取 $bytes_sent,但是 log 中似乎无法打印出来域名,所以无法区分不同域名的流量。
配置多个 server,一个域名配置一个,但是会报错,说存在相同的 IP:PORT,因为域名都是指向同个 IP 
1 AngryPanda 2020-04-18 11:49:11 +08:00 试试 iptables ? |
2 yghack 2020-04-18 11:56:42 +08:00 ngx_req_status |
3 just1 2020-04-18 11:59:16 +08:00 via Android listen 9000 server_name 你的玉米 域名$host 应该就可以了 网上的配置都不能直接抄吗 |
4 also24 2020-04-18 12:05:37 +08:00 via Android 划重点:TCP 协议 纯粹的 TCP 通信,只有 IP 端口,没有域名,也就无从谈起根据域名统计。 |
5 also24 2020-04-18 12:10:09 +08:00 via Android 如果不能理解这一点,可以开个 wireshark 抓包看看 HTTP 的具体结构。 HTTP 协议虽然基于 TCP 连接,但是它是自己发送了 host 字段,所以能够被识别域名(确切来说是 HTTP1.1 ) 纯粹的 TCP 连接,靠 IP 端口建立连接,发内容就完了,并没有标记域名。 |
6 balabalaguguji OP @also24 是的没有域名 |
7 balabalaguguji OP |
8 just1 2020-04-18 12:17:55 +08:00 @balabalaguguji #6 不好意思没注意看是 tcp,就如上面说的 tcp 没有标记域名所以只能监听不同端口 |
9 balabalaguguji OP @just1 不同端口就很简单的,现在就是想同个端口,感觉是做不到 |
10 just1 2020-04-18 13:07:53 +08:00 @balabalaguguji #9 流量里不会包含域名信息,所以 nginx 也不可能知道是哪一个域名。除非自定义传输格式,在里面加上域名,但是 nginx 估计也不好实现 |
11 corvofeng 2020-04-18 15:07:12 +08:00 via Android TCP 协议就建一层代理,在代理服务器上统计吧, 也不需要用 Nginx 吧, 可以走 HTTP 代理 |
12 lxy42 2020-04-18 17:08:07 +08:00 ``` http { log_format main '$host: $bytes_sent'; server { listen 80; server_name a.example.com; access_log /var/log/nginx/a.example.com.access.log main; } server { listen 80; server_name b.example.com; access_log /var/log/nginx/b.example.com.access.log main; } } ``` 这个配置应该可以做到分别统计不同域名的流量把 |
13 balabalaguguji OP @lxy42 注意审题 |
14 areless 2020-04-18 19:06:09 +08:00 set_by_lua,header_filter_by_lua,access_by_lua_file,这些都是可以在 server 下跑的。ngx.log 变量一个个输出到日志里试试。应该行 |
15 shynome 2020-04-18 19:58:40 +08:00 via Android |
16 hcymk2 2020-04-18 20:42:40 +08:00 via Android $hostname 不能打印域名没么? |
17 ErrorMan 2020-04-18 22:48:48 +08:00 @balabalaguguji nginx 是支持多域名同 IP 的,感觉是你配置多域名的配置文件写的有问题,建议检查一下 |
18 also24 2020-04-18 23:11:43 +08:00 |
19 shynome 2020-04-19 00:08:51 +08:00 via Android |
20 lishunan246 2020-04-19 00:39:13 +08:00 via Android TCP 协议跟域名没有半毛钱关系。 如果你是 TLS,靠 SNI 就能区分,用 http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html |
21 cydian 2020-04-19 00:47:59 +08:00 via Android @also24 @balabalaguguji @hcymk2 TCP 和 Nginx 有什么关系? 我觉得楼主的主标题就是误导人。 下面的楼回复歪了,是因为楼主标题来个 Nginx 另外回复一下问题: 我觉得不行,一个端口,TCP 不能判断域名。 @also24 这个回复应该是正解。 |
22 balabalaguguji OP @lishunan246 感谢回复 |