Frp 内网穿透后,怎么通过同一域名+SSL+不同端口来访问? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
charce
V2EX    NAS

Frp 内网穿透后,怎么通过同一域名+SSL+不同端口来访问?

  •  
  •   charce 2023-10-17 11:21:29 +08:00 4144 次点击
    这是一个创建于 732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为群晖没有公网 IP ,所以使用 Frp 进行内网穿透。

    目前 Frp 已经能够实现IP+端口进行访问,但是 Frp 要进行 http 访问只能是“不同的域名+相同的端口”进行访问。

    我希望能保持“相同的域名+不同的端口”来进行访问,同时加上SSL 证书

    有尝试过在服务器再加上反代的方式来访问,但是都不能实现我想要的效果。

    请教各位大神这个要怎么弄?

    流程图示意如下:

    流程图示意

    第 1 条附言    2023-10-17 23:18:23 +08:00

    感谢各位的热心解答!

    因为我是初学者,很多东西都只能是一直尝试。

    原来其实走了很多弯路,一直在公网服务器尝试不同的反代设置。

    但其实最后发现只要在群晖设置好反代,frp把端口映射到公网就可以了,服务端只需要配置好Frps就可以!

    大概流程也说明一下:

    1. 在群晖和服务器先分别装好Frpc和Frps;
    2. 在群晖的反代服务器中,把原来http的端口反代设置到https的端口;
    3. Frpc中的端口使用群晖已经配置过的https的端口;
    4. 把域名解析到Frps对应的服务器IP就可以了!

    具体流程可以参考下面这个流程图,不对的地方请指正! piP8obq.jpg

    37 条回复    2023-10-18 15:30:30 +08:00
    JamesR
        1
    JamesR  
       2023-10-17 11:38:36 +08:00   1
    1.公网服务器上面配个 Apache 。
    2.Apache 配置多个虚拟主机(域名相同,基于端口不同的)。
    3.每个虚拟主机配置反向代理,代理本地 Frp 穿透好的端口。

    需要学习下 Apache 的安装,虚拟主机和 SSL 的配置。
    PXW139
        2
    PXW139  
       2023-10-17 11:41:27 +08:00   1
    这不 nginx 反代一下就可以,每个服务一个配置文件就行
    flashBee233
        3
    flashBee233  
       2023-10-17 11:51:41 +08:00   1
    可以参考一下我的这个配置,我这也是自己摸索的,如有不对请指点
    flashBee233
        4
    flashBee233  
       2023-10-17 11:51:47 +08:00
    PXW139
        5
    PXW139  
       2023-10-17 11:52:49 +08:00   1
    哦,应该还有更简单的,直接一个配置文件搞定
    同时监听所有提供服务的端口,判断入口端口,对应到目标端口完事
    if ( $server_port = 5679 ){ set $my_port 5678;}
    反代里面
    proxy_pass http://127.0.0.1:$my_port;
    opengps
        6
    opengps  
       2023-10-17 12:11:35 +08:00
    反代为什么达不到你要的效果?哪一点卡住的?
    ysc3839
        7
    ysc3839  
       2023-10-17 12:14:51 +08:00 via Android   1
    在 NAS 上设置 https ,监听不同端口,frp 只进行端口转发即可。
    skyzwb
        8
    skyzwb  
       2023-10-17 12:15:58 +08:00   1
    很简单在你公有云服务器上安装一个 nginx Proxy Manager ,然后配置就行了,很简单证书也能一件申请
    itechify
        9
    itechify  
    PRO
       2023-10-17 12:19:22 +08:00 via Android   1
    7 楼和我的想法一致
    hyperbin
        10
    hyperbin  
       2023-10-17 12:19:55 +08:00 via Android   1
    弄个*.domain.com 的证书,然后 ngnix 到子域名,访问时 a.domain.comb.domain.com 就是不同的服务了
    superchijinpeng
        11
    superchijinpeng  
       2023-10-17 12:21:48 +08:00   1
    caddy 直接配
    guanzhangzhang
        12
    guanzhangzhang  
       2023-10-17 12:27:37 +08:00   1
    你搞组网后,直接三层就通了就没这么多事情了
    y1y1
        13
    y1y1  
       2023-10-17 12:28:32 +08:00   1
    反代
    ryc111
        14
    ryc111  
       2023-10-17 12:36:15 +08:00   1
    讲一个我自己目前搞的方式:
    - frp -> 一堆端口 ( serv1:10001 ,serv2:10002 ,serv3: 10003 ,serv4: 10004....) FYI,我目前转用了 rathole ,可以映射到 vps 的 127.0.0.1,而不是暴露在外。
    - 证书申请的时候设置泛域名: 使用 *.your.domain
    - 使用 nginx/caddy/etc 对于各个服务进行反代:
    serv1.your.domain -> 10001 ... 以此类推

    更简单的方法就是用 frpc 的 vhostHTTPSPort 。但是这样的话就需要自己管理证书,也可以自签名。
    devliu1
        15
    devliu1  
       2023-10-17 12:49:40 +08:00   1
    1. https 可以在反代配置

    2. frp 多配置几个端口就好,一个端口也行,反代通过 host 判断

    3. 如果反代部署在本地,端口通过 FRP 暴露在远程,是获取不到用户 IP 真实的(因为是通过 frpc 连接的反代),可以配置 proxy protocol
    linuxgo
        16
    linuxgo  
       2023-10-17 14:29:33 +08:00   1
    我用过 nps 是同一域名指定不同端口访问
    charce
        17
    charce  
    OP
       2023-10-17 14:39:57 +08:00
    @flashBee233 我看了你的配置文件,是通过多个子域名来访问的,跟我想要的不太一样。
    因为我同时有用 ipv6 在访问,所以才会想要保持同一个域名,这样证书管理也简单一点。
    charce
        18
    charce  
    OP
       2023-10-17 14:40:18 +08:00
    @ryc111 @flashBee233 我看了你的配置文件,是通过多个子域名来访问的,跟我想要的不太一样。
    因为我同时有用 ipv6 在访问,所以才会想要保持同一个域名,这样证书管理也简单一点。
    charce
        19
    charce  
    OP
       2023-10-17 14:42:02 +08:00
    @ysc3839
    @oneisall8955 如果在 NAS 上面设置 https ,访问的依然是 frps 的公网 IP 啊,不太明白要怎么操作,请赐教
    charce
        20
    charce  
    OP
       2023-10-17 14:45:24 +08:00
    @hyperbin 因为我同时也用 ipv6 访问,为了保持统一不想搞太多子域名,所以才会想要保持同一个域名+多个不同端口的方式。
    DigitalG
        21
    DigitalG  
       2023-10-17 14:46:01 +08:00   1
    我记得群晖的 docker 应用 可以配合 web station 制作门户访问的方式来着?
    类似 https://xxxx.com:a_fixed_port/path 指向服务。域名和端口是固定的,一个 path 指向一个服务。
    ysc3839
        22
    ysc3839  
       2023-10-17 15:01:06 +08:00 via Android   1
    @charce “访问的依然是 frps 的公网 IP 啊”是什么意思?
    charce
        23
    charce  
    OP
       2023-10-17 15:01:29 +08:00
    @DigitalG 因为群晖实际上是在内网环境里面的,所以实际上现在访问的都是 frp 暴露出来的端口。再在群晖里面配置是不是就没有效果?
    flashBee233
        24
    flashBee233  
       2023-10-17 15:56:09 +08:00   1
    @charce 可以申请个免费的泛域名证书
    BaseException
        25
    BaseException  
       2023-10-17 16:01:01 +08:00   1
    nginx 写多个配置文件就行。listen 不同的端口。

    我有几个服务就是

    - https://emby.940304.xyz:23399
    - https://emby.940304.xyz:16790

    楼主想要实现的是我这种吗
    BaseException
        26
    BaseException  
       2023-10-17 16:03:08 +08:00   1
    https://emby.940304.xyz:16790/start-page.html

    我还部署了更多服务,均是使用的高位端口(因为 80 443 被运营商封锁 你懂的)。
    PXW139
        27
    PXW139  
       2023-10-17 16:24:24 +08:00   1
    最简单的示范
    其他配置往里面加就行
    ```
    server
    {
    listen 9080;
    listen 9081;
    listen 9082;
    server_name www.abc.xyz;
    index index.php index.html index.htm default.php default.htm default.html;

    if ( $server_port = 9080 ){ set $my_port 8080;}#端口自行修改为映射端口
    if ( $server_port = 9081 ){ set $my_port 8081;}
    if ( $server_port = 9082 ){ set $my_port 8082;}

    location / {
    proxy_pass http://127.0.0.1:$my_port;
    }
    }
    ```
    @PXW139
    charce
        28
    charce  
    OP
       2023-10-17 17:58:31 +08:00
    @BaseException #25 是这个效果,要怎么弄呢?
    jccaipc
        29
    jccaipc  
       2023-10-17 21:50:58 +08:00
    Mark 关注下,跟 LZ 一样有此需求,前期 nginx 反向代理也是搞过,不过失败了
    charce
        30
    charce  
    OP
       2023-10-17 23:19:06 +08:00
    @ysc3839 #22 感谢!还是用你这个思路设置成功了!
    charce
        31
    charce  
    OP
       2023-10-17 23:19:59 +08:00
    @jccaipc #29 我设置好了,你可以参考一下主题下面的附言。
    charce
        32
    charce  
    OP
       2023-10-17 23:22:39 +08:00
    @linuxgo #16 之前也用过 NPS ,但是 NPS 好久没有更新了,也爆出过漏洞,所以就没用了。
    BaseException
        33
    BaseException  
       2023-10-17 23:36:24 +08:00
    @charce #28 既然 “目前 Frp 已经能够实现 IP+端口进行访问” 那么 nginx +ssl 就能解决了,监听不同端口,不同端口 proxy_pass 到 frps 服务端本地不同的端口就行了
    charce
        34
    charce  
    OP
       2023-10-18 00:08:53 +08:00
    @BaseException #33 我只懂得在宝塔面板里面创建网站,然后用面板自带的 GUI 来配置反代,有尝试着去配置一下,都没有成功,如果可以您可以分享一下经验,谢谢。
    ryc111
        35
    ryc111  
       2023-10-18 02:21:28 +08:00
    @charce

    ipv6 和这个没关系呀,ipv6 只是一个地址而已。

    我获取的证书是泛域名的证书。 *.domain ,放在 vps 上自动更新。
    为了方便,域名解析那也可以直接设置泛域名 *.domain 都指向 vps ,这样,你想要什么子域名,都直接用。


    看到你用宝塔,所以更推荐你使用我这种配置,每个服务都用一个子域名,其实和端口后置也差不多对吧,实在不行你的域名写成:
    端口.域名 : 5000.domain.com 这样嘛。
    因为这样子,你只要在宝塔里面: 1,添加站点,2,配置 ssl ,3 添加反向代理。
    不需要自己手动配置任何 nginx 配置文件,都是点点点就能完成的。
    charce
        36
    charce  
    OP
       2023-10-18 13:09:01 +08:00
    @ryc111 #35 这个确实也是一种思路,操作起来也不复杂。

    但是有个问题是,IPv6 的 80/443 端口是被封的,所以如果用子域名,IPv6 就会访问不了。

    所以要保证 IPv4 和 IPv6 两种情况都能访问的话,就只能用高位端口。

    我现在保留 IPv6 是考虑到在有 IPv6 环境下,直连的速度是比较快的,所以就需要用高位端口来进行访问。

    大概技术路径是这样的:

    [![piPcFBV.jpg]( https://z1.ax1x.com/2023/10/18/piPcFBV.jpg)]( https://imgse.com/i/piPcFBV)
    hyperbin
        37
    hyperbin  
       2023-10-18 15:30:30 +08:00 via Android
    @charce 完全不冲突
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 17:20 PVG 01:20 LAX 10:20 JFK 13:20
    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