Nginx 与源主机通讯相关问题! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
acbot
V2EX    NGINX

Nginx 与源主机通讯相关问题!

  •  
  •   acbot 2022-08-04 15:56:42 +08:00 5477 次点击
    这是一个创建于 1163 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近一直在琢磨 Nginx 与上游源服务器之前通讯及其安全的问题,想要实现的目标就是:第一,就是仅仅是授权的 nginx 才能做源服务器的代理。 第二,nginx 与源服务器之前通讯最好能实现加密传输,明文的 HTTP 协议容易被截取,密文的 HTTPS 特征也太明显容易被拦截。基于这些需求衍生除了下面的几个问题,望各位大佬解疑

    stream { upstream bj { server bj.abc.com:8080; } server { listen 80; proxy_pass bj; } }

    http { upstream bj { server bj.abc.com:8080; } server { listen 80; location / { proxy_pass http://bj; } } }

    1. stream 和 http 都可以实现 HTTP 反向代理,那么这两种方式与上游源主机通讯的时候使用什么协议呢?是 TCP/UDP 还是是 HTTP 协议呢,或者说 stream 是使用 TCP ,http 使用的就是 http ?

    2. 如果上游的源服务器有证书双认证,nginx 能实现反向代理吗,就是 upstream 能配置客户端证书吗? nginx 与下游客户端双认证可有可无。

    3. nginx 与上游源服务器通讯出了 http 模块使用 https 这种模式实现加密,那么还有其他什么方案吗?

    4. 除开配置系统级代理之外 stream 和 http 的 upstream 这里可以单独配置代理吗,比如 sockes/sockes5 等代理协议与上游服务器联系!

    15 条回复    2022-08-05 14:02:17 +08:00
    Judoon
        1
    Judoon  
       2022-08-04 18:12:36 +08:00
    1 、stream 就是 4 层,http 就是 7 层,接收和转发都是
    2 、http 模块可以直接配置 proxy_ssl_certificate 等
    3 、只有 tls/ssl ,其他加密可能要自己实现模块
    4 、我觉得没有意义,你可以直接把你的中间代理配到 upstream 上(如果我没理解错你的意思的话)
    y830CAa5nink4rUQ
        2
    y830CAa5nink4rUQ  
       2022-08-04 18:30:52 +08:00
    我理解你的情况大概是这样:

    1. 要求加密并且不让嗅探者知道是什么协议
    2. 并发不高的话

    那么我给个很简单好用的方案: 使用 brook 做隧道。

    大概是这样:
    上游服务器运行一个 brook server
    nginx 服务器运行一个 brook client

    数据流:

    下游客户端 <---http/https 协议---> nginx <--- TCP 协议 ---> brook client <--- brook 专有协议 ---> brook server <--- http/https 协议 --->上游服务器
    Aloento
        3
    Aloento  
       2022-08-04 18:31:10 +08:00
    我觉得 https 挺好的,已经很安全了,我自己的环境虽然用的是 socket 但是双方都有 TLS 加密
    http 传输层就是 TCP 啊... 感觉你问这个问题意义不大
    acbot
        4
    acbot  
    OP
       2022-08-04 19:27:32 +08:00
    @Judoon

    1. 意思就是这么接的就这么转,是不?
    4. 意思就是说我直接用代理做 upstream ,如果是这样的话那就是我理解才局限了。以为上游只能是 HTTP 服务器。
    acbot     5
    acbot  
    OP
       2022-08-04 19:30:22 +08:00
    @DrX “要求加密并且不让嗅探者知道是什么协议” 对,就是这个意思,并且是不想让未授权的 IP 能直接访问源,只能访问 nginx 。
    acbot
        6
    acbot  
    OP
       2022-08-04 19:34:52 +08:00
    @Aloento 如果 nginx 和源之间仅仅用 https 这种加密,第一 他不能鉴权(不开启证书双向认证的话) 第二 这个是常规协议,那么加密后虽然中间方不能解密但是可以通过 HTTPS 特征做拦截,这样通讯就无法完成了。
    y830CAa5nink4rUQ
        7
    y830CAa5nink4rUQ  
       2022-08-04 19:34:58 +08:00
    @acbot 你可以试试我的方案,源服务器不暴露任何公开端口,brook server 和 brook client 密码一致才能连上,保证其他人无法连接。
    acbot
        8
    acbot  
    OP
       2022-08-04 19:36:26 +08:00
    @DrX 好的,谢谢!
    ik
        9
    ik  
       2022-08-04 19:53:32 +08:00 via iPhone
    4. nginx 不能直接实现, 但是可以配合其他软件来实现, 例如下面这个 gost(我徒手打的,不确定对不对),就是端口转发+前置代理,将 socks 服务上的 443 ,转发到本地 8443 端口, 源端口都没有直接暴露到公网上。

    gost -L tcp://127.0.0.1:8443/127.0.0.1:443 -F socks5://user:pass@xxxxx
    ik
        10
    ik  
       2022-08-04 19:58:54 +08:00 via iPhone
    另外源 nginx 上加上 basic 认证,或者 allow ip 是不是也可以解决
    acbot
        11
    acbot  
    OP
       2022-08-04 20:17:50 +08:00
    @ik “basic 认证 + allow ip” 这种也算一是个折中思路,但是分开用估计就有问题了。
    ik
        12
    ik  
       2022-08-04 20:42:12 +08:00 via iPhone
    @acbot 嗯 可以试试 #2 #9
    westoy
        13
    westoy  
       2022-08-04 20:46:04 +08:00
    你那些机器之间组个 VPN 不就行了么......
    acbot
        14
    acbot  
    OP
       2022-08-04 21:00:49 +08:00
    @westoy 如果 nginx 本身就能实现需求不是更好,管理起来方便。VPN 这种应该就是最后的手段了,并且又要附带很多东西。
    jiulang
        15
    jiulang  
       2022-08-05 14:02:17 +08:00
    给 nginx 写插件吧,只能这样才能为所欲为。话说插件我也不会写,让我来做的话,我就用 yarp
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     914 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:56 PVG 05:56 LAX 14:56 JFK 17:56
    Do have faith in what you're doing.
    ubao 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