You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linode服务器上通过反向代理部署SvelteKit/PocketBase应用至不同子域名

如何在Linode服务器上通过反向代理部署SvelteKit/PocketBase应用至不同子域名

嘿,我来帮你搞定这个端口冲突的问题!核心思路是用Caddy作为统一的反向代理,让它独占443端口处理所有HTTPS请求,再把不同子域名的流量转发给对应的服务——这样PocketBase和SvelteKit只需要在各自的内部端口运行,就不会打架啦。下面是一步步的操作指南:

1. 调整PocketBase的监听端口

之前你的PocketBase应该是直接绑定了443端口,现在我们把它改成一个内部端口(比如8090):

  • 找到你的PocketBase systemd服务文件,一般在/etc/systemd/system/pocketbase.service
  • 编辑启动命令,把原来的--https=0.0.0.0:443改成--http=0.0.0.0:8090,比如:
    ExecStart=/path/to/your/pocketbase serve --http=0.0.0.0:8090
    
  • 重新加载systemd配置并重启服务:
    sudo systemctl daemon-reload
    sudo systemctl restart pocketbase
    
  • 先验证本地访问:curl http://localhost:8090,能看到PocketBase的响应就没问题。

2. 调整SvelteKit的运行端口

同样,让SvelteKit跑在另一个内部端口(比如3000):

  • 如果用pm2启动,直接在命令里指定端口:
    pm2 start npm --name "sveltekit-app" -- run start -- --port 3000
    
  • 或者在SvelteKit的vite.config.js里配置端口:
    export default defineConfig({
      server: {
        port: 3000
      }
    });
    
  • 验证本地访问:curl http://localhost:3000,能看到你的应用响应就OK。

3. 配置Caddy作为反向代理

现在让Caddy来接管443端口,把不同子域名的请求转发给对应的服务:

  • 编辑Caddy配置文件(一般在/etc/caddy/Caddyfile),替换成下面的内容:
    backend.mydomain.com {
      reverse_proxy localhost:8090
      # Caddy会自动申请并维护Let's Encrypt SSL证书,不用手动管
    }
    
    appname.mydomain.com {
      reverse_proxy localhost:3000
    }
    
  • 重启Caddy服务:
    sudo systemctl restart caddy
    

4. 验证最终效果

现在你可以分别访问:

  • https://backend.mydomain.com:应该能正常打开PocketBase的界面
  • https://appname.mydomain.com:应该能正常加载你的SvelteKit应用

两个服务会同时运行,再也不会出现端口冲突的问题啦!

额外注意事项

  • 确保Linode的防火墙规则开放了80端口443端口(Caddy需要80端口来完成SSL证书的验证流程)
  • 内部服务用HTTP监听完全安全,因为Caddy已经在外层处理了HTTPS加密,流量从用户到Caddy是加密的,Caddy到内部服务是本地传输,不用担心安全问题
  • 如果Caddy启动失败,查看日志排查问题:journalctl -u caddy

备注:内容来源于stack exchange,提问作者Jozef Jezik

火山引擎 最新活动