因为群晖没有公网 IP ,所以使用 Frp 进行内网穿透。
目前 Frp 已经能够实现IP+端口进行访问,但是 Frp 要进行 http 访问只能是“不同的域名+相同的端口”进行访问。
我希望能保持“相同的域名+不同的端口”来进行访问,同时加上SSL 证书。
有尝试过在服务器再加上反代的方式来访问,但是都不能实现我想要的效果。
请教各位大神这个要怎么弄?
流程图示意如下:
![]() | 1 JamesR 2023-10-17 11:38:36 +08:00 ![]() 1.公网服务器上面配个 Apache 。 2.Apache 配置多个虚拟主机(域名相同,基于端口不同的)。 3.每个虚拟主机配置反向代理,代理本地 Frp 穿透好的端口。 需要学习下 Apache 的安装,虚拟主机和 SSL 的配置。 |
2 PXW139 2023-10-17 11:41:27 +08:00 ![]() 这不 nginx 反代一下就可以,每个服务一个配置文件就行 |
3 flashBee233 2023-10-17 11:51:41 +08:00 ![]() 可以参考一下我的这个配置,我这也是自己摸索的,如有不对请指点 |
4 flashBee233 2023-10-17 11:51:47 +08:00 |
5 PXW139 2023-10-17 11:52:49 +08:00 ![]() 哦,应该还有更简单的,直接一个配置文件搞定 同时监听所有提供服务的端口,判断入口端口,对应到目标端口完事 if ( $server_port = 5679 ){ set $my_port 5678;} 反代里面 proxy_pass http://127.0.0.1:$my_port; |
![]() | 6 opengps 2023-10-17 12:11:35 +08:00 反代为什么达不到你要的效果?哪一点卡住的? |
![]() | 7 ysc3839 2023-10-17 12:14:51 +08:00 via Android ![]() 在 NAS 上设置 https ,监听不同端口,frp 只进行端口转发即可。 |
![]() | 8 skyzwb 2023-10-17 12:15:58 +08:00 ![]() 很简单在你公有云服务器上安装一个 nginx Proxy Manager ,然后配置就行了,很简单证书也能一件申请 |
![]() | 9 itechify PRO ![]() 7 楼和我的想法一致 |
10 hyperbin 2023-10-17 12:19:55 +08:00 via Android ![]() 弄个*.domain.com 的证书,然后 ngnix 到子域名,访问时 a.domain.com 和 b.domain.com 就是不同的服务了 |
![]() | 11 superchijinpeng 2023-10-17 12:21:48 +08:00 ![]() caddy 直接配 |
![]() | 12 guanzhangzhang 2023-10-17 12:27:37 +08:00 ![]() 你搞组网后,直接三层就通了就没这么多事情了 |
![]() | 13 y1y1 2023-10-17 12:28:32 +08:00 ![]() 反代 |
14 ryc111 2023-10-17 12:36:15 +08:00 ![]() 讲一个我自己目前搞的方式: - 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 。但是这样的话就需要自己管理证书,也可以自签名。 |
![]() | 15 devliu1 2023-10-17 12:49:40 +08:00 ![]() 1. https 可以在反代配置 2. frp 多配置几个端口就好,一个端口也行,反代通过 host 判断 3. 如果反代部署在本地,端口通过 FRP 暴露在远程,是获取不到用户 IP 真实的(因为是通过 frpc 连接的反代),可以配置 proxy protocol |
16 linuxgo 2023-10-17 14:29:33 +08:00 ![]() 我用过 nps 是同一域名指定不同端口访问 |
![]() | 17 charce OP @flashBee233 我看了你的配置文件,是通过多个子域名来访问的,跟我想要的不太一样。 因为我同时有用 ipv6 在访问,所以才会想要保持同一个域名,这样证书管理也简单一点。 |
![]() | 18 charce OP |
![]() | 19 charce OP |
![]() | 20 charce OP @hyperbin 因为我同时也用 ipv6 访问,为了保持统一不想搞太多子域名,所以才会想要保持同一个域名+多个不同端口的方式。 |
![]() | 21 DigitalG 2023-10-17 14:46:01 +08:00 ![]() 我记得群晖的 docker 应用 可以配合 web station 制作门户访问的方式来着? 类似 https://xxxx.com:a_fixed_port/path 指向服务。域名和端口是固定的,一个 path 指向一个服务。 |
![]() | 23 charce OP @DigitalG 因为群晖实际上是在内网环境里面的,所以实际上现在访问的都是 frp 暴露出来的端口。再在群晖里面配置是不是就没有效果? |
24 flashBee233 2023-10-17 15:56:09 +08:00 ![]() @charce 可以申请个免费的泛域名证书 |
![]() | 25 BaseException 2023-10-17 16:01:01 +08:00 ![]() nginx 写多个配置文件就行。listen 不同的端口。 我有几个服务就是 - https://emby.940304.xyz:23399 - https://emby.940304.xyz:16790 楼主想要实现的是我这种吗 |
![]() | 26 BaseException 2023-10-17 16:03:08 +08:00 ![]() |
27 PXW139 2023-10-17 16:24:24 +08:00 ![]() 最简单的示范 其他配置往里面加就行 ``` 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 |
![]() | 28 charce OP @BaseException #25 是这个效果,要怎么弄呢? |
![]() | 29 jccaipc 2023-10-17 21:50:58 +08:00 Mark 关注下,跟 LZ 一样有此需求,前期 nginx 反向代理也是搞过,不过失败了 |
![]() | 33 BaseException 2023-10-17 23:36:24 +08:00 @charce #28 既然 “目前 Frp 已经能够实现 IP+端口进行访问” 那么 nginx +ssl 就能解决了,监听不同端口,不同端口 proxy_pass 到 frps 服务端本地不同的端口就行了 |
![]() | 34 charce OP @BaseException #33 我只懂得在宝塔面板里面创建网站,然后用面板自带的 GUI 来配置反代,有尝试着去配置一下,都没有成功,如果可以您可以分享一下经验,谢谢。 |
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 配置文件,都是点点点就能完成的。 |
![]() | 36 charce OP @ryc111 #35 这个确实也是一种思路,操作起来也不复杂。 但是有个问题是,IPv6 的 80/443 端口是被封的,所以如果用子域名,IPv6 就会访问不了。 所以要保证 IPv4 和 IPv6 两种情况都能访问的话,就只能用高位端口。 我现在保留 IPv6 是考虑到在有 IPv6 环境下,直连的速度是比较快的,所以就需要用高位端口来进行访问。 大概技术路径是这样的: []( https://imgse.com/i/piPcFBV) |