因为群晖没有公网 IP ,所以使用 Frp 进行内网穿透。
目前 Frp 已经能够实现IP+端口进行访问,但是 Frp 要进行 http 访问只能是“不同的域名+相同的端口”进行访问。
我希望能保持“相同的域名+不同的端口”来进行访问,同时加上SSL 证书。
有尝试过在服务器再加上反代的方式来访问,但是都不能实现我想要的效果。
请教各位大神这个要怎么弄?
流程图示意如下:
1
JamesR 2023-10-17 11:38:36 +08:00 1
1.公网服务器上面配个 Apache 。
2.Apache 配置多个虚拟主机(域名相同,基于端口不同的)。 3.每个虚拟主机配置反向代理,代理本地 Frp 穿透好的端口。 需要学习下 Apache 的安装,虚拟主机和 SSL 的配置。 |
2
PXW139 2023-10-17 11:41:27 +08:00 1
这不 nginx 反代一下就可以,每个服务一个配置文件就行
|
3
flashBee233 2023-10-17 11:51:41 +08:00 1
可以参考一下我的这个配置,我这也是自己摸索的,如有不对请指点
|
4
flashBee233 2023-10-17 11:51:47 +08:00
|
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; |
6
opengps 2023-10-17 12:11:35 +08:00
反代为什么达不到你要的效果?哪一点卡住的?
|
7
ysc3839 2023-10-17 12:14:51 +08:00 via Android 1
在 NAS 上设置 https ,监听不同端口,frp 只进行端口转发即可。
|
8
skyzwb 2023-10-17 12:15:58 +08:00 1
很简单在你公有云服务器上安装一个 nginx Proxy Manager ,然后配置就行了,很简单证书也能一件申请
|
9
oneisall8955 2023-10-17 12:19:22 +08:00 via Android 1
7 楼和我的想法一致
|
10
hyperbin 2023-10-17 12:19:55 +08:00 via Android 1
弄个*.domain.com 的证书,然后 ngnix 到子域名,访问时 a.domain.com 和 b.domain.com 就是不同的服务了
|
11
superchijinpeng 2023-10-17 12:21:48 +08:00 1
caddy 直接配
|
12
guanzhangzhang 2023-10-17 12:27:37 +08:00 1
你搞组网后,直接三层就通了就没这么多事情了
|
13
y1y1 2023-10-17 12:28:32 +08:00 1
反代
|
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 。但是这样的话就需要自己管理证书,也可以自签名。 |
15
devliu1 2023-10-17 12:49:40 +08:00 1
1. https 可以在反代配置
2. frp 多配置几个端口就好,一个端口也行,反代通过 host 判断 3. 如果反代部署在本地,端口通过 FRP 暴露在远程,是获取不到用户 IP 真实的(因为是通过 frpc 连接的反代),可以配置 proxy protocol |
16
linuxgo 2023-10-17 14:29:33 +08:00 1
我用过 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 1
我记得群晖的 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 1
@charce 可以申请个免费的泛域名证书
|
25
BaseException 2023-10-17 16:01:01 +08:00 1
nginx 写多个配置文件就行。listen 不同的端口。
我有几个服务就是 - https://emby.940304.xyz:23399 - https://emby.940304.xyz:16790 楼主想要实现的是我这种吗 |
26
BaseException 2023-10-17 16:03:08 +08:00 1
|
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 |
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 环境下,直连的速度是比较快的,所以就需要用高位端口来进行访问。 大概技术路径是这样的: [![piPcFBV.jpg]( https://z1.ax1x.com/2023/10/18/piPcFBV.jpg)]( https://imgse.com/i/piPcFBV) |