nginx 熟悉的来,求教个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
balabalaguguji
V2EX    问与答

nginx 熟悉的来,求教个问题

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

    问题

    我想统计不同域名的下行流量,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     Solana     5709 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:47 PVG 09:47 LAX 17:47 JFK 20:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86