nginx 熟悉的来,求教个问题

2020-04-18 11:34:54 +08:00
 balabalaguguji

问题

我想统计不同域名的下行流量,TCP 协议

尝试方法:

请问各位有什么好方法吗?

3591 次点击
所在节点    问与答
22 条回复
AngryPanda
2020-04-18 11:49:11 +08:00
试试 iptables ?
yghack
2020-04-18 11:56:42 +08:00
ngx_req_status
just1
2020-04-18 11:59:16 +08:00
listen 9000
server_name 你的玉米
域名$host 应该就可以了
网上的配置都不能直接抄吗
also24
2020-04-18 12:05:37 +08:00
划重点:TCP 协议


纯粹的 TCP 通信,只有 IP 端口,没有域名,也就无从谈起根据域名统计。
also24
2020-04-18 12:10:09 +08:00
如果不能理解这一点,可以开个 wireshark 抓包看看 HTTP 的具体结构。

HTTP 协议虽然基于 TCP 连接,但是它是自己发送了 host 字段,所以能够被识别域名(确切来说是 HTTP1.1 )

纯粹的 TCP 连接,靠 IP 端口建立连接,发内容就完了,并没有标记域名。
balabalaguguji
2020-04-18 12:11:24 +08:00
@also24 是的没有域名
balabalaguguji
2020-04-18 12:12:02 +08:00
@just1
@yghack
你们说的这些好像都是 http 的
just1
2020-04-18 12:17:55 +08:00
@balabalaguguji #6 不好意思没注意看是 tcp,就如上面说的 tcp 没有标记域名所以只能监听不同端口
balabalaguguji
2020-04-18 12:25:04 +08:00
@just1 不同端口就很简单的,现在就是想同个端口,感觉是做不到
just1
2020-04-18 13:07:53 +08:00
@balabalaguguji #9 流量里不会包含域名信息,所以 nginx 也不可能知道是哪一个域名。除非自定义传输格式,在里面加上域名,但是 nginx 估计也不好实现
corvofeng
2020-04-18 15:07:12 +08:00
TCP 协议就建一层代理,在代理服务器上统计吧, 也不需要用 Nginx 吧, 可以走 HTTP 代理
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;

}
}
```
这个配置应该可以做到分别统计不同域名的流量把
balabalaguguji
2020-04-18 17:48:47 +08:00
@lxy42 注意审题
areless
2020-04-18 19:06:09 +08:00
set_by_lua,header_filter_by_lua,access_by_lua_file,这些都是可以在 server 下跑的。ngx.log 变量一个个输出到日志里试试。应该行
shynome
2020-04-18 19:58:40 +08:00
hcymk2
2020-04-18 20:42:40 +08:00
$hostname 不能打印域名没么?
ErrorMan
2020-04-18 22:48:48 +08:00
@balabalaguguji nginx 是支持多域名同 IP 的,感觉是你配置多域名的配置文件写的有问题,建议检查一下
also24
2020-04-18 23:11:43 +08:00
已经强调是纯 TCP 流量了,还这么多人进坑的嘛……
shynome
2020-04-19 00:08:51 +08:00
@also24 你要知道有人是不知道不清楚自己要的是什么,他既然要求了域名,那肯定是 http 同级别应用层的协议,那么通过模块插件肯定是可以做到的
@balabalaguguji
lishunan246
2020-04-19 00:39:13 +08:00
TCP 协议跟域名没有半毛钱关系。
如果你是 TLS,靠 SNI 就能区分,用
http://nginx.org/en/docs/stream/ngx_stream_ssl_preread_module.html

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

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

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

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

© 2021 V2EX