前言:家庭开发者的“甜蜜烦恼”
你是否也想在家里搭建自己的服务?无论是 NAS、个人网站、代码仓库,还是影音中心,将这些服务安全地发布到公网,随时随地访问,是许多技术爱好者的乐趣所在。
通常,我们会遇到两大“拦路虎”:
80 (HTTP) 和 443 (HTTPS)。这导致我们无法通过 https://你的域名.com 这样标准的方式来访问服务。退而求其次,我们只能使用非标准端口,例如 https://你的域名.com:8008。
那么,如果我有多个服务需要发布呢?比如一个 8008 端口的A服务,和一个 8009 端口的B服务,我希望通过 https://你的域名.com:8008 和 https://你的域名.com:8009 分别访问它们。本文将以广受好评的服务器管理面板 1Panel 为例,手把手教你如何实现这个目标。
核心思路:端口映射的“移花接木”
在开始之前,我们需要理解其中的核心逻辑。关键在于,我们的 Web 服务器(在1Panel中是 OpenResty)需要一种方法来区分发往 8008 和 8009 的请求。
由于路由器的一个外部端口只能转发到一个内部端口,我们不能把 8008 和 8009 都转发到服务器的同一个 443 端口上。
正确的做法是:让服务器内部也监听多个端口,然后建立一一对应的转发关系。
...:8008 → 路由器转发到 → 服务器 :443 → 指向服务A...:8009 → 路由器转发到 → 服务器 :444 → 指向服务B理解了这一点,接下来的操作就会非常清晰。
准备工作
在开始之前,请确保您已准备好:
sh.jue.sh)。127.0.0.1:8008,另一个在 127.0.0.1:8009)。第一步:配置第一个服务 (基础)
首先,我们来配置 https://sh.jue.sh:8008,为后续操作打下基础。
sh.jue.shhttp://127.0.0.1:8008 (您的第一个服务地址)Let's Encrypt。DNS-01!因为80端口被封,无法使用文件验证。你需要选择你的DNS服务商并填入API密钥。8008 转发到 1Panel服务器内网IP的 443 端口。https://sh.jue.sh:8008,您应该能正常看到您的第一个服务,并且浏览器会显示安全锁标志。第二步:让1Panel的Web服务器监听新端口
默认情况下,1Panel的Web服务器只监听 80 和 443 端口。我们需要让它多监听一个端口,比如 444。
OpenResty → 点击 「配置」。docker-compose.yml 文件。ports 部分,新增一行 "444:444"。ports:
- "80:80"
- "443:443"
- "444:444" # <-- 新增此行
444 端口。第三步:手动为第二个服务创建配置文件
这是本次操作最核心的步骤。我们需要手动创建一个配置文件来处理到 444 端口的请求。
/opt/1panel/apps/openresty/openresty/www/sites/sh.jue.sh/sh.jue.sh.conf 文件。复制并粘贴该文件,将其重命名为 sh.jue.sh_8009.conf。..._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 配置保持不变 ...
}
}
第四步:加载配置并完成最后设置
OpenResty → 点击 「重载」,让新配置文件生效。8009 转发到 1Panel服务器内网IP的 444 端口。大功告成!
现在,一切都已准备就绪。打开浏览器:
https://sh.jue.sh:8008,您看到的是服务A。https://sh.jue.sh:8009,您看到的是服务B。两个服务都使用了HTTPS加密,并且通过同一个域名、不同端口进行访问,完美解决了端口封锁环境下的多服务发布需求。
最后的话
通过一些手动的“高级”操作,我们成功地扩展了1Panel的默认功能,使其适应了特殊的网络环境。这种方法的核心在于理解端口转发和Web服务器监听的原理。
需要注意的是,由于我们手动创建了配置文件,当1Panel未来有重大更新时,您可能需要检查手动配置是否依然兼容。不过,这种底层逻辑非常稳定,一般不会受到影响。
希望这篇教程能帮助到有同样困扰的朋友们,祝大家折腾愉快!
