为ElysiaJS与Bun配置SSL证书遇问题求助
解决ElysiaJS + Bun的SSL证书配置问题
方法1:直接用Bun原生HTTPS启动Elysia
Elysia基于Bun运行,Bun本身支持HTTPS服务,无需依赖Node的https模块。直接在listen方法中传入SSL配置即可:
import { Elysia } from 'elysia'; import fs from 'fs'; const app = new Elysia() .get('/', () => 'Hello HTTPS!') // 这里添加你的其他API路由 .listen({ port: 8443, tls: { key: fs.readFileSync('/etc/letsencrypt/live/myurl.com/privkey.pem'), cert: fs.readFileSync('/etc/letsencrypt/live/myurl.com/fullchain.pem') } }); console.log(`HTTPS Server running on ${app.server?.url}`);
原理:Bun的listen方法内置tls参数,直接传入证书和密钥文件内容,就能让Elysia以HTTPS模式启动,不需要额外创建服务器实例。
方法2:Nginx反向代理(生产环境推荐)
生产环境更建议用Nginx处理SSL,同时还能实现负载均衡、请求转发等功能,步骤如下:
- 安装Nginx
在DigitalOcean Droplet上执行命令:
sudo apt update && sudo apt install nginx
- 配置Nginx反向代理
创建或修改站点配置文件(例如/etc/nginx/sites-available/myurl.com):
server { listen 80; server_name myurl.com www.myurl.com; # 自动将HTTP请求重定向到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl; server_name myurl.com www.myurl.com; # 指定SSL证书路径 ssl_certificate /etc/letsencrypt/live/myurl.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/myurl.com/privkey.pem; # 反向代理到本地Elysia服务 location / { proxy_pass http://localhost:3000; # 这里填Elysia运行的HTTP端口 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; } }
- 启用配置并重启Nginx
# 启用配置 sudo ln -s /etc/nginx/sites-available/myurl.com /etc/nginx/sites-enabled/ # 检查配置语法 sudo nginx -t # 重启Nginx生效 sudo systemctl restart nginx
- 启动Elysia服务
正常启动Elysia在HTTP端口即可,无需处理SSL:
import { Elysia } from 'elysia'; const app = new Elysia() .get('/', () => 'Hello World!') .listen(3000); console.log(`Server running on ${app.server?.url}`);
注意事项
- 确保Let's Encrypt证书路径正确,且Nginx进程拥有读取证书文件的权限(默认Let's Encrypt会配置好权限)。
- 如果用Bun直接启动HTTPS,需要在DigitalOcean防火墙中开放8443端口的入站流量。
- 生产环境建议用PM2或systemd管理Elysia进程,避免服务意外中断。
内容的提问来源于stack exchange,提问作者theRealestAEP
相关产品推荐
相关产品推荐

