V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
balabalaguguji
V2EX  ›  问与答

nginx 熟悉的来,求教个问题

  •  1
     
  •   balabalaguguji · 2020-04-18 11:34:54 +08:00 · 3554 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题

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

    尝试方法:

    • 从 log 中读取 我本来想输出 log,然后从 log 中读取 $bytes_sent,但是 log 中似乎无法打印出来域名,所以无法区分不同域名的流量。

    • 配置多个 server,一个域名配置一个,但是会报错,说存在相同的 IP:PORT,因为域名都是指向同个 IP jietu

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

    第 1 条附言  ·  2020-04-19 08:14:23 +08:00
    感谢各位的回复,好多人估计听到 nginx 就被带偏到 http 的配置了,我这里是 TCP 的配置。

    结果应该是 TCP 没有记录域名,所以无法通过域名来统计流量。
    22 条回复    2020-04-19 08:12:38 +08:00
    AngryPanda
        1
    AngryPanda  
       2020-04-18 11:49:11 +08:00
    试试 iptables ?
    yghack
        2
    yghack  
       2020-04-18 11:56:42 +08:00
    ngx_req_status
    just1
        3
    just1  
       2020-04-18 11:59:16 +08:00 via Android
    listen 9000
    server_name 你的玉米
    域名$host 应该就可以了
    网上的配置都不能直接抄吗
    also24
        4
    also24  
       2020-04-18 12:05:37 +08:00 via Android
    划重点:TCP 协议


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

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

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

    }
    }
    ```
    这个配置应该可以做到分别统计不同域名的流量把
    balabalaguguji
        13
    balabalaguguji  
    OP
       2020-04-18 17:48:47 +08:00
    @lxy42 注意审题
    areless
        14
    areless  
       2020-04-18 19:06:09 +08:00
    set_by_lua,header_filter_by_lua,access_by_lua_file,这些都是可以在 server 下跑的。ngx.log 变量一个个输出到日志里试试。应该行
    shynome
        15
    shynome  
       2020-04-18 19:58:40 +08:00 via Android
    hcymk2
        16
    hcymk2  
       2020-04-18 20:42:40 +08:00 via Android
    $hostname 不能打印域名没么?
    ErrorMan
        17
    ErrorMan  
       2020-04-18 22:48:48 +08:00
    @balabalaguguji nginx 是支持多域名同 IP 的,感觉是你配置多域名的配置文件写的有问题,建议检查一下
    also24
        18
    also24  
       2020-04-18 23:11:43 +08:00
    已经强调是纯 TCP 流量了,还这么多人进坑的嘛……
    shynome
        19
    shynome  
       2020-04-19 00:08:51 +08:00 via Android
    @also24 你要知道有人是不知道不清楚自己要的是什么,他既然要求了域名,那肯定是 http 同级别应用层的协议,那么通过模块插件肯定是可以做到的
    @balabalaguguji
    lishunan246
        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
    cydian
        21
    cydian  
       2020-04-19 00:47:59 +08:00 via Android
    @also24
    @balabalaguguji
    @hcymk2
    TCP 和 Nginx 有什么关系?
    我觉得楼主的主标题就是误导人。
    下面的楼回复歪了,是因为楼主标题来个 Nginx

    另外回复一下问题:
    我觉得不行,一个端口,TCP 不能判断域名。
    @also24 这个回复应该是正解。
    balabalaguguji
        22
    balabalaguguji  
    OP
       2020-04-19 08:12:38 +08:00
    @lishunan246 感谢回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1598 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 16:56 · PVG 00:56 · LAX 08:56 · JFK 11:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.