看到了帖子 https://www.v2ex.com/t/991802 之后,我也想将自己的 nas 只暴露一个端口,但是根据贴内的信息我怎么也完成不了,希望大家能赐教
我的 NAS 上有多个服务,这里例举 memos 和 gitea ,装了 nginx 和 ddns-go ,将自己的域名指向了本机的 IPV6 地址 我最初的设想是这样的
我的域名:5000/memos --> localhost:30001(Memos 暴露的端口)
我的域名:5000/gitea --> localhost:30002(Gitea 暴露的端口)
我的 nginx 配置大概是这样
server {
listen [::]:5000 ipv6only=on;
server_name memos.sworld.club;
location /memos/ {
proxy_pass http://localhost:30001/;
}
}
我发现这个 memos 应用内部会访问/asserts 这些接口,而不是/memos/asserts ,这样我就无法正确反向代理它们了,我看到有人说应该使用 sub_filter ,但是我并没有成功
后来我换了一个办法,我想要使用多个子域名映射到同一端口,设想是这样的
memos.我的域名:5000 --> localhost:30001(Memos 暴露的端口)
gitea.我的域名:5000 --> localhost:30002(Gitea 暴露的端口)
nginx 配置大概是这样
server {
listen [::]:5000 ipv6only=on;
server_name memos.sworld.club;
location / {
proxy_pass http://localhost:30001;
}
}
server {
listen [::]:5000 ipv6only=on;
server_name gitea.sworld.club;
location / {
proxy_pass http://localhost:30002;
}
}
但是这样 nginx 会报端口冲突,也还是不行。 我今天折腾这个问题好几个小时,但是仍然没有结果,通过域名访问 NAS 的服务有没有一些最佳实践?恳请大家说说自己的看法
1
Hconk 297 天前 via iPhone 1
我是用 nginx proxy manager 来管理,内网 nas 装了很多服务,通过 frp 穿透到有公网 ip 服务器上,然后 NPM 上配置多个二级域名通过内网 ip 访问本机 frp 映射过来的不同端口,只需要对外暴露 80 端口就可以,用 NPM 还有一个好处就是很方便加认证和 https ,基本不用手写配置。我这么用 memos 没遇到什么问题。不过你好像是家宽,没有 80 端口,不确是不是能这么做,可以试试。
|
2
xinmans 297 天前 via iPhone
npm 足够了,我在 n1 盒子上装了 npm ,还支持 ssl 证书签发,爽的一笔,和 AIO 解耦
|
3
ysc3839 297 天前 via Android
建议分域名
|
4
ysc3839 297 天前 via Android 1
按理说不会端口冲突,请发出完整配置文件和错误日志
|
5
yin1999 297 天前 via Android
最后一版的配置,尝试移除第二个 server 块中的 ipv6only=on 。对于 webdav 应该只能用 sni 来分流了
|
7
sworld233 OP |
8
benjaminliangcom 297 天前
我用 traefik ,可以配置 mTls ,只有安装了客户端证书的才能连接
|
9
LeeReamond 297 天前
老哥是公网暴露 nas 的 ipv6 然后解析直连吗,还是有中转的模式
|
10
Wovvvv 297 天前
兄弟,第一次玩这个不是很明白,我的方案是使用家宽,跟你一样使用的 ipv6 公网 ip ,端口没有 443 有 80 ,这样可不可以使用 https 加密吗?
|
12
wyxls 297 天前
在 docker 容器里,涉及 web 服务有很大概率会在内部内置一个反代的 web server ,通常会默认做好服务监听和服务端口的转发,比如 elasticsearch 之类的容器镜像。
反代没有很复杂的点,无非就是正确地将请求转发给容器内部并确保容器能正确返回结果给客户端,但由于上述的一层反代会让情况变麻烦 如果想节省功夫开箱即用,最好是用二级域名区分服务,这样就不用研究容器内部是怎么处理网络请求的,缺点是需要记忆维护域名 如果想要用子路径反代容器服务,就得先了解熟悉容器内部的反代逻辑,然后正确配置 NGINX 的反代路径,在涉及到端口转发时会变得尤为麻烦,因为你还要研究容器内部是如何处理请求的。优点当然是域名通用,缺点也很明显,配置麻烦 ipv6only 官方文档说是一次性配置 This parameter is turned on by default. It can only be set once on start. https://nginx.org/en/docs/http/ngx_http_core_module.html 最后说一下 NPM ,这个的确提供了一个比较方便的 webui ,内置 certbot 而且能设置成 dns challenge 轻松获得免费的通配域名证书,方便上 SSL 和自动更新,应对一般反代需求十分够用。 但配置上不够灵活,更新修复也不够及时(隔了快 5 个月才修复 certbot 依赖缺失问题);它只提供了固定的一些反代配置,有些自定义内容会与模板冲突,想添加 stream 也只能在指定路径添加内容(data/custom/stream.conf) |
13
Xingchen366 297 天前 via Android
上二级域名方便一点 推荐使用 lucky 替换 nginx 配置更简单
|
14
wyxls 297 天前
@Xingchen366 lucky 的 webui 比起 npm 配置反代更加“死板”,勉强够用
|
15
sworld233 OP |
16
wyxls 297 天前 1
@sworld233 更正一下,刚才 pull 了 npm 的 v2.11.1 ,certbot 缺少 zope 的问题依然没解决,要用的话记得在里边安装一下 zope
去年 5 月份官方就有 PR 简单修复,但是一直没 merge [官方 PR#2756]( https://github.com/NginxProxyManager/nginx-proxy-manager/pull/2756) |
17
genicsoft123 297 天前
装个面板吧,方便很多,另外搭配 frp 用,外网穿透更方便,或者结合 tailscale 用
|
18
sworld233 OP @genicsoft123 我现在是装了 NPM ,域名指向 v6 地址,然后又接入了 zeroter
|
20
libook 296 天前 via Android
需要应用本身支持自定义子路径,比如假设 memos 配置项里支持设置自定义子路径,那么你可以设置子路径为/memos ,这样 memos 就是去/mrmos/asserts 找资源。
如果应用本身不支持,且路径上和其他应用有重合,那就只能用域名来区分了。 我就是 NAS 上一个 NGINX 端口代理所有应用,每个应用分配一个二级域名,这样 NGINX 可以通过访问域名来路由到应用的端口。 |
21
KIMI360 296 天前
群晖的话直接用内置的反向代理就可以了,可以参考: https://post.smzdm.com/p/awonk4xk/
|
22
hi909 296 天前
|
23
ikk098 294 天前
用 nginx proxy manager 吧。 简单易上手
|
24
genicsoft123 293 天前
@sworld233 我最近测试了几个网络,发现 frp 速度最快,已经在运行测试。tailscale 也不错不过没有 frp 速度快。zerotier 和 tailscale 差不多。我是把局域网的 GPU 映射到外网去用。效果不错。能跑满我的上行带宽
|
25
qbaidu 286 天前
location /memos/ {
proxy_pass http://localhost:30001/memos/; } 第一种要配置的话要这样 |