请不要把任何和邀请码有关的内容发到 NAS 节点。

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

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

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

  •  
  •   charce · Oct 17, 2023 · 5287 views
    This topic created in 1112 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    流程图示意如下:

    流程图示意

    Supplement 1  ·  Oct 17, 2023

    感谢各位的热心解答!

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

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

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

    大概流程也说明一下:

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

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

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

    需要学习下 Apache 的安装,虚拟主机和 SSL 的配置。
    PXW139
    PXW139
    Oct 17, 2023❤️1
    2
    这不 nginx 反代一下就可以,每个服务一个配置文件就行
    flashBee233
    flashBee233
    Oct 17, 2023❤️1
    3
    可以参考一下我的这个配置,我这也是自己摸索的,如有不对请指点
    PXW139
    PXW139
    Oct 17, 2023❤️1
    5
    哦,应该还有更简单的,直接一个配置文件搞定
    同时监听所有提供服务的端口,判断入口端口,对应到目标端口完事
    if ( $server_port = 5679 ){ set $my_port 5678;}
    反代里面
    proxy_pass http://127.0.0.1:$my_port;
    opengps
    opengps
    Oct 17, 2023
    6
    反代为什么达不到你要的效果?哪一点卡住的?
    ysc3839
    ysc3839
    Oct 17, 2023 via Android❤️1
    7
    在 NAS 上设置 https ,监听不同端口,frp 只进行端口转发即可。
    skyzwb
    skyzwb
    Oct 17, 2023❤️1
    8
    很简单在你公有云服务器上安装一个 nginx Proxy Manager ,然后配置就行了,很简单证书也能一件申请
    itechify
    itechify
    Oct 17, 2023 via Android❤️1
    9
    7 楼和我的想法一致
    hyperbin
    hyperbin
    Oct 17, 2023 via Android❤️1
    10
    弄个*.domain.com 的证书,然后 ngnix 到子域名,访问时 a.domain.com 和 b.domain.com 就是不同的服务了
    cutiechi
    cutiechi
    Oct 17, 2023❤️1
    11
    caddy 直接配
    guanzhangzhang
    guanzhangzhang
    Oct 17, 2023❤️1
    12
    你搞组网后,直接三层就通了就没这么多事情了
    y1y1
    y1y1
    Oct 17, 2023❤️1
    13
    反代
    ryc111
    ryc111
    Oct 17, 2023❤️1
    14
    讲一个我自己目前搞的方式:
    - 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
    devliu1
    Oct 17, 2023❤️1
    15
    1. https 可以在反代配置

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

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

    我有几个服务就是

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

    楼主想要实现的是我这种吗
    BaseException
    BaseException
    Oct 17, 2023❤️1
    26
    https://emby.940304.xyz:16790/start-page.html

    我还部署了更多服务,均是使用的高位端口(因为 80 443 被运营商封锁 你懂的)。
    PXW139
    PXW139
    Oct 17, 2023❤️1
    27
    最简单的示范
    其他配置往里面加就行
    ```
    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
    charce
    OP
    Oct 17, 2023
    28
    @BaseException #25 是这个效果,要怎么弄呢?
    jccaipc
    jccaipc
    Oct 17, 2023
    29
    Mark 关注下,跟 LZ 一样有此需求,前期 nginx 反向代理也是搞过,不过失败了
    charce
    charce
    OP
    Oct 17, 2023
    30
    @ysc3839 #22 感谢!还是用你这个思路设置成功了!
    charce
    charce
    OP
    Oct 17, 2023
    31
    @jccaipc #29 我设置好了,你可以参考一下主题下面的附言。
    charce
    charce
    OP
    Oct 17, 2023
    32
    @linuxgo #16 之前也用过 NPS ,但是 NPS 好久没有更新了,也爆出过漏洞,所以就没用了。
    BaseException
    BaseException
    Oct 17, 2023
    33
    @charce #28 既然 “目前 Frp 已经能够实现 IP+端口进行访问” 那么 nginx +ssl 就能解决了,监听不同端口,不同端口 proxy_pass 到 frps 服务端本地不同的端口就行了
    charce
    charce
    OP
    Oct 18, 2023
    34
    @BaseException #33 我只懂得在宝塔面板里面创建网站,然后用面板自带的 GUI 来配置反代,有尝试着去配置一下,都没有成功,如果可以您可以分享一下经验,谢谢。
    ryc111
    ryc111
    Oct 18, 2023
    35
    @charce

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

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


    看到你用宝塔,所以更推荐你使用我这种配置,每个服务都用一个子域名,其实和端口后置也差不多对吧,实在不行你的域名写成:
    端口.域名 : 5000.domain.com 这样嘛。
    因为这样子,你只要在宝塔里面: 1,添加站点,2,配置 ssl ,3 添加反向代理。
    不需要自己手动配置任何 nginx 配置文件,都是点点点就能完成的。
    charce
    charce
    OP
    Oct 18, 2023
    36
    @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
    hyperbin
    Oct 18, 2023 via Android
    37
    @charce 完全不冲突
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1534 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 23:02 · PVG 07:02 · LAX 15:02 · JFK 18:02
    ♥ Do have faith in what you're doing.