仅能转发单个端口(443)时,如何通过子域名实现Proxmox及多服务的外网访问?
仅能转发单个端口(443)时,如何通过子域名实现Proxmox及多服务的外网访问?
绝对可以做到!这种场景下最常用的解决方案就是部署反向代理服务器——它就像一个智能流量分发网关,能根据访问的子域名,把外网来的请求精准转发到内网对应的服务上,完美适配你只能转发443端口的限制。
下面给你一步步讲具体怎么操作:
第一步:准备子域名解析
首先得把你需要的子域名(比如proxmox.example.com、jellyfin.example.com)都指向你的公网IP:
- 如果是静态公网IP,直接在域名服务商的后台添加A记录,把每个子域名都指向你的公网IP即可。
- 如果是动态公网IP,得搭配DDNS服务(很多路由器自带,或者用第三方工具),让域名自动跟随公网IP更新。
第二步:部署反向代理服务器
推荐用Caddy或者Nginx,两者都能搞定,Caddy的优势是自动管理SSL证书,新手友好;Nginx则更灵活,适合有一定基础的用户。
方案一:用Caddy(推荐新手)
- 先在你的一台内网服务器(可以是专门的小主机,甚至是Proxmox里的一个虚拟机)上安装Caddy。
- 创建并编辑Caddy配置文件
Caddyfile,内容如下:
proxmox.example.com { # 转发到内网Proxmox的管理端口(默认8006) reverse_proxy http://192.168.x.x:8006 # 如果Proxmox强制HTTPS,也可以改成下面这样,跳过证书验证(内网证书一般是自签的) # reverse_proxy https://192.168.x.x:8006 { # transport http { # tls_insecure_skip_verify # } # } } jellyfin.example.com { # 转发到内网Jellyfin的端口(默认8096) reverse_proxy http://192.168.x.y:8096 }
- 启动Caddy,它会自动向Let's Encrypt申请免费的SSL证书,不用你手动处理443端口的证书问题,非常省心。
方案二:用Nginx
- 安装Nginx后,创建一个新的配置文件(比如
/etc/nginx/sites-available/service-proxy.conf):
# Proxmox子域名配置 server { listen 443 ssl; server_name proxmox.example.com; # 这里可以用certbot自动生成SSL证书,或者手动指定证书路径 ssl_certificate /etc/letsencrypt/live/proxmox.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/proxmox.example.com/privkey.pem; location / { proxy_pass http://192.168.x.x:8006; # 传递必要的请求头,确保服务能正确识别来源 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果转发HTTPS的Proxmox,需要添加以下两行跳过证书验证 # proxy_pass https://192.168.x.x:8006; # proxy_ssl_verify off; } } # Jellyfin子域名配置 server { listen 443 ssl; server_name jellyfin.example.com; ssl_certificate /etc/letsencrypt/live/jellyfin.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/jellyfin.example.com/privkey.pem; location / { proxy_pass http://192.168.x.y:8096; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
- 用
certbot工具自动申请并配置SSL证书(执行certbot --nginx即可,跟着提示走)。 - 启用配置文件:
ln -s /etc/nginx/sites-available/service-proxy.conf /etc/nginx/sites-enabled/,然后重启Nginx:systemctl restart nginx。
第三步:配置路由器端口转发
在你的路由器后台,找到端口转发设置,把公网的443端口转发到反向代理服务器的内网IP的443端口。这样所有外网来的HTTPS请求(443端口)都会先打到反向代理服务器,再由它根据子域名分发到对应的服务。
一些注意事项
- 确保内网中反向代理服务器能访问到Proxmox、Jellyfin等服务的对应端口,内网防火墙不要拦截这些请求。
- 如果用Proxmox的HTTPS端口转发,记得跳过证书验证,因为Proxmox默认用的是自签证书,反向代理会验证失败。
- 要是你的公网IP是动态的,一定要配置DDNS,不然IP变动后域名解析就失效了。
备注:内容来源于stack exchange,提问作者Ari Hall
相关产品推荐
相关产品推荐

