nginxproxymanager 遇到几个问题,求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moon255
V2EX    NGINX

nginxproxymanager 遇到几个问题,求助

  •  
  •   moon255 2024-03-02 20:16:06 +08:00 3376 次点击
    这是一个创建于 618 天前的主题,其中的信息可能已经有所发展或是发生改变。
    可能都是比较基础的问题,因为接触的时间不久,用词可能不太专业。我的云服务器是 debian12 ,装了 3 个服务,第一个是 frps ,代理家里 nas 的 jellyfin ,端口 8096 。第二个是个聊天服务,在 3000 端口。第三个是 docker 版的 nginxproxymanager 。用 nginx 反代前两个服务,设置了通信规则,可以用域名访问了。(我一开始以为所有服务都可以通过 https 来访问,就不用暴露服务本身的端口,结果用禁用端口后都没法访问了。。。)
    有几个问题需要请教:
    1.现在除了域名,也可以用 http://ip:端口的形式来访问服务,这样的话设置的通信规则就不起作用了,就觉得好别扭和奇怪。我想问能否禁用掉 ip+端口( http )的形式,只通过域名( https )访问,是要在高级规则里设置吗?我设置了一下发现命令是写在一个 server 块里的,没办法分开监听 80 和 443 ,不知道怎么搞。
    2.第二个聊天服务可以设置监听 0.0.0.0:3000 或 127.0.0.1:3000 ,设置成前者正常访问没问题。然后我想不暴露端口,就设置成后者,查了文档,转发主机/ip 那里填了 host.docker.internal ,但是无法访问,502 。我用 ssh 的端口转发看是没问题的,就是说 nginxproxymanager 没办法代理宿主机的服务吗?
    3.如果我暴露较少的端口,用 nginxproxymanager 能做到吗?还是说尽量用 docker 来搭建服务?有没有更好的方法?
    希望各位大佬能指点一下
    16 条回复    2024-03-05 12:11:15 +08:00
    cctv6
        1
    cctv6  
       2024-03-02 20:55:33 +08:00
    我理解的是,你这里的 nginx-proxy-manager 是监听了云服务器的 80/443 端口,然后你的域名 xxx.domain.com 解析到了你的服务器。你通过域名来访问你家里的 jellyfin 和 3000 端口的聊天服务。现在问题是,现在既可以用 ip:port 访问服务,也可以通过 domain.com 访问服务。

    问题 1: frp 也是可以设置监听 127.0.0.1 这个地址的,这样外部就没法通过公网 IP+端口的方式访问了。或者你在云服务器的安全组里面设置一下规则,只允许特定的端口。

    问题 2: 聊天服务监听的 127.0.0.1 是宿主机的 127.0.0.1 ,然后 host.docker.internal 指向是 docker 网桥在主机上的 IP ,两个 IP 不一样,所以访问它不通。

    问题 3: 能做到,不一定要都用 docker 来搭建服务。

    ---

    建议,你可以把 nginx-proxy-manager 改成使用 host 网络模式,和宿主机共用同一个网络命名空间,这样容器就能够直接访问宿主机上的网络了。

    然后其他的服务在运行的时候,你就都监听 127.0.0.1 ,在 nginx-proxy-manager 里面配置后端的时候,统一都填写 127.0.0.1 。
    moon255
        2
    moon255  
    OP
       2024-03-02 21:35:57 +08:00
    @cdlnls
    现在难受的是,前两个本机部署的服务,如果监听 127.0.0.1 ,nginx 就无法代理宿主机的服务,虽然没暴露端口,但公网上也访问不了(因为那个聊天服务会分享给认识的人用)。如果监听 0.0.0.0 (公网地址),那么 ip+端口直接就能访问,就不安全了。
    我试过用 host 模式,这个模式不能指定端口了,nginx 管理面板用不了。其实我现在也用 docker 搭了个密码管理服务,加入了 docker 网络,只暴露了 docker 内部端口,也只能用域名来访问,这样隔离还挺好用的,还是不想放弃 bridge 模式。主要是不知道怎么代理宿主机服务,能解决就挺舒服的。
    mulu
        3
    mulu  
       2024-03-03 00:38:27 +08:00 via Android
    可以设置 iptables 只开放 80 、443 和 ssh 端口,或者各种后端服务监听本地 IP ,比如你的服务器内网 IP 是 10.0.0.1 ,docker 启动参数 -p 10.0.0.1:3000:3000
    moon255
        4
    moon255  
    OP
       2024-03-03 09:33:28 +08:00
    @mulu
    我把能监听本地的服务都设置成监听本地了,比如各种管理面板。现在 docker 容器都可以不暴露端口了,但是非 docker 服务如果监听本地就没办法发布出去
    zhzy0077
        5
    zhzy0077  
       2024-03-04 00:08:27 +08:00 via Android
    docker 默认 container 在单独的一个子网里 你如果要访问宿主机的服务要加 --network host
    dode
        6
    dode  
       2024-03-04 09:32:25 +08:00
    再单独为 ip 访问放一个空服务
    Laysan
        7
    Laysan  
       2024-03-04 10:01:11 +08:00   1
    服务器只需要暴露 443 端口,npm 通过域名转发到内部的端口,docker 内部访问主机 ip 你看下网段,一般是 172.17.0.1 ,比如你 jellyfin 就配置 jellyfin.xx.com 转发到 172.17.0.1:8096,聊天就配 chat.xx.com 转发到 172.17.0.1: 3000 ,然后配置好 ssl 证书就能直接通过这两个域名访问了,也不用加端口号的
    waringid
        8
    waringid  
       2024-03-04 11:38:18 +08:00
    @Laysan 正解
    morota
        9
    morota  
       2024-03-04 14:43:10 +08:00
    借楼问一下,nginx 能在同一个端口同时转发 http 和 tcp 吗?
    moon255
        10
    moon255  
    OP
       2024-03-04 19:17:54 +08:00
    @Laysan 感谢,将地址设置成 docker0 的 ip ( 172.17.0.1 )就可以访问了,但是我用防火墙屏蔽服务的端口后就登不上去,请问是什么原因呢?而且我把服务都设置成监听本地,开不开放端口都无法访问了,怎样才能实现只暴露 443 呢?
    moon255
        11
    moon255  
    OP
       2024-03-04 19:20:16 +08:00
    另外,我进入 npm 容器 ping host.docker.internal ,ip 就是 docker0 的地址,但是我用这个主机名代替 ip 就无法访问,搞不懂...
    Laysan
        12
    Laysan  
       2024-03-04 19:34:11 +08:00
    @moon255 #10 云服务器一般都有安全组策略配置,把 443 端口开放就行
    Laysan
        13
    Laysan  
       2024-03-04 19:36:31 +08:00
    @moon255 #11 这个你检查下 hosts 配置吧
    moon255
        14
    moon255  
    OP
       2024-03-04 21:17:19 +08:00
    @Laysan 我的云服务商没有提供安全组配置,只在服务器上安装 ufw 控制端口开关。我找到这篇文章 https://llxx.cc/bt-ban-ip/,博主也是这样操作就 ok 了,如果没有的话是不是就不能实现了?
    Laysan
        15
    Laysan  
       2024-03-04 23:12:59 +08:00
    @moon255 #14 就用防火墙放行就可以吧
    moon255
        16
    moon255  
    OP
       2024-03-05 12:11:15 +08:00
    @Laysan 防火墙放行就相当于暴露端口了呀 @@
    ip+端口能直接访问到服务的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1462 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:42 PVG 00:42 LAX 08:42 JFK 11:42
    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