NIPAO

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

2025年08月25日
阅读时间4分钟可读
jue
项码士
作者

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

你是否也想在家里搭建自己的服务?无论是 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"
    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;
    # 在 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未来有重大更新时,您可能需要检查手动配置是否依然兼容。不过,这种底层逻辑非常稳定,一般不会受到影响。

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

分享这篇文章

觉得有用?分享给更多人吧!