我想统计不同域名的下行流量,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 感谢回复
|