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

2023-10-17 11:21:29 +08:00
 charce

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

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

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

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

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

流程图示意如下:

3449 次点击
所在节点    NAS
37 条回复
DigitalG
2023-10-17 14:46:01 +08:00
我记得群晖的 docker 应用 可以配合 web station 制作门户访问的方式来着?
类似 https://xxxx.com:a_fixed_port/path 指向服务。域名和端口是固定的,一个 path 指向一个服务。
ysc3839
2023-10-17 15:01:06 +08:00
@charce “访问的依然是 frps 的公网 IP 啊”是什么意思?
charce
2023-10-17 15:01:29 +08:00
@DigitalG 因为群晖实际上是在内网环境里面的,所以实际上现在访问的都是 frp 暴露出来的端口。再在群晖里面配置是不是就没有效果?
flashBee233
2023-10-17 15:56:09 +08:00
@charce 可以申请个免费的泛域名证书
BaseException
2023-10-17 16:01:01 +08:00
nginx 写多个配置文件就行。listen 不同的端口。

我有几个服务就是

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/982693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX