项码士/博客/实战教程-突破端口封锁:如何使用1Panel在家庭网络中发布多个HTTPS服务

实战教程-突破端口封锁:如何使用1Panel在家庭网络中发布多个HTTPS服务

🕒创建时间2025年10月29日

前言:家庭开发者的“甜蜜烦恼”

你是否也想在家里搭建自己的服务?无论是 NAS、个人网站、代码仓库,还是影音中心,将这些服务安全地发布到公网,随时随地访问,是许多技术爱好者的乐趣所在。

通常,我们会遇到两大“拦路虎”:

1.
动态公网IP:这个问题比较好解决,通过 DDNS(动态DNS)就能搞定。
2.
运营商端口封锁:这是一个更棘手的问题。国内的家庭宽带(如电信、联通)普遍封锁了网站服务的标准端口 80 (HTTP) 和 443 (HTTPS)。

这导致我们无法通过 https://你的域名.com 这样标准的方式来访问服务。退而求其次,我们只能使用非标准端口,例如 https://你的域名.com:8008

那么,如果我有多个服务需要发布呢?比如一个 8008 端口的A服务,和一个 8009 端口的B服务,我希望通过 https://你的域名.com:8008https://你的域名.com:8009 分别访问它们。本文将以广受好评的服务器管理面板 1Panel 为例,手把手教你如何实现这个目标。

核心思路:端口映射的“移花接木”

在开始之前,我们需要理解其中的核心逻辑。关键在于,我们的 Web 服务器(在1Panel中是 OpenResty)需要一种方法来区分发往 80088009 的请求。

由于路由器的一个外部端口只能转发到一个内部端口,我们不能把 80088009 都转发到服务器的同一个 443 端口上。

正确的做法是:让服务器内部也监听多个端口,然后建立一一对应的转发关系

外部请求 ...:8008 → 路由器转发到 → 服务器 :443 → 指向服务A
外部请求 ...:8009 → 路由器转发到 → 服务器 :444 → 指向服务B

理解了这一点,接下来的操作就会非常清晰。

准备工作

在开始之前,请确保您已准备好:

一台安装好 1Panel 并正常运行的服务器。
一个已经设置好 DDNS 并指向您家公网IP的域名(例如 sh.jue.sh)。
至少两个在您服务器上运行的内部服务(例如,一个在 127.0.0.1:8008,另一个在 127.0.0.1:8009)。
您家路由器的管理员权限。

第一步:配置第一个服务 (基础)

首先,我们来配置 https://sh.jue.sh:8008,为后续操作打下基础。

1.
在1Panel中创建反向代理
进入 「网站」「创建网站」 → 选择 「反向代理」
主域名: sh.jue.sh
代理地址: http://127.0.0.1:8008 (您的第一个服务地址)
2.
申请SSL证书 (关键步骤)
网站创建后,进入该网站的 「配置」「SSL」
证书来源选择 Let's Encrypt
申请方式必须选择 DNS-01!因为80端口被封,无法使用文件验证。你需要选择你的DNS服务商并填入API密钥。
点击“申请并启用”,并开启“强制HTTPS”。
3.
设置路由器端口转发
登录路由器管理后台。
添加一条转发规则:外部端口 8008 转发到 1Panel服务器内网IP的 443 端口
4.
验证
现在,访问 https://sh.jue.sh:8008,您应该能正常看到您的第一个服务,并且浏览器会显示安全锁标志。

第二步:让1Panel的Web服务器监听新端口

默认情况下,1Panel的Web服务器只监听 80443 端口。我们需要让它多监听一个端口,比如 444

1.
在1Panel中,进入 「应用」 → 找到 OpenResty → 点击 「配置」
2.
编辑 docker-compose.yml 文件。
3.
ports 部分,新增一行 "444:444"
YAML
ports:
  - "80:80"
  - "443:443"
  - "444:444" # <-- 新增此行
4.
点击 「保存并更新」。容器会自动重启,并开始监听 444 端口。

第三步:手动为第二个服务创建配置文件

这是本次操作最核心的步骤。我们需要手动创建一个配置文件来处理到 444 端口的请求。

1.
在1Panel中,进入 「文件」
2.
导航到目录:/opt/1panel/apps/openresty/openresty/www/sites/sh.jue.sh/
3.
您会看到一个 sh.jue.sh.conf 文件。复制并粘贴该文件,将其重命名为 sh.jue.sh_8009.conf
4.
双击打开这个新的 ..._8009.conf 文件,修改以下两处
listen 443 ssl http2; 修改为 listen 444 ssl http2;
proxy_pass <http://127.0.0.1:8008>; 修改为 proxy_pass <http://127.0.0.1:8009>;

 

Shell
# 在 sh.jue.sh_8009.conf 文件中

server {
    listen 444 ssl http2; # <-- 修改监听端口

    # ... 中间配置保持不变 ...
    server_name sh.jue.sh;
    ssl_certificate /www/sites/sh.jue.sh/fullchain.pem;
    ssl_certificate_key /www/sites/sh.jue.sh/privkey.pem;
    # ... SSL证书配置保持不变,共用同一张证书 ...

    location / {
        proxy_pass <http://127.0.0.1:8009>; # <-- 修改为第二个服务的地址
        # ... 其他 proxy 配置保持不变 ...
    }
}
5.
保存文件。

第四步:加载配置并完成最后设置

1.
重载配置
回到 「应用」OpenResty → 点击 「重载」,让新配置文件生效。
2.
新增路由器转发规则
再次进入路由器管理后台。
新增一条转发规则:外部端口 8009 转发到 1Panel服务器内网IP的 444 端口

大功告成!

现在,一切都已准备就绪。打开浏览器:

访问 https://sh.jue.sh:8008,您看到的是服务A。
访问 https://sh.jue.sh:8009,您看到的是服务B。

两个服务都使用了HTTPS加密,并且通过同一个域名、不同端口进行访问,完美解决了端口封锁环境下的多服务发布需求。

最后的话

通过一些手动的“高级”操作,我们成功地扩展了1Panel的默认功能,使其适应了特殊的网络环境。这种方法的核心在于理解端口转发和Web服务器监听的原理。

需要注意的是,由于我们手动创建了配置文件,当1Panel未来有重大更新时,您可能需要检查手动配置是否依然兼容。不过,这种底层逻辑非常稳定,一般不会受到影响。

希望这篇教程能帮助到有同样困扰的朋友们,祝大家折腾愉快!

© 2025 nipao. All rights reserved.