Support #30
打开如果我的ec2可以用ssh链接到oraclecloud,但是oraclecloud无法暴露http到公网,我能否用ec2的nginx代理oraclecloud上启动的jenkins?
0%
描述
可以,而且这是一个很经典、也很靠谱的玩法 👍
结论先放前面:完全可行,而且我还挺推荐你这么干的。
你现在的拓扑大概是这样(我用人话画一下):
浏览器 ──HTTP──> EC2(公网IP, Nginx)
│
│ SSH / 内网 TCP
▼
Oracle Cloud VM
Jenkins :8080
Oracle Cloud 出不去 HTTP,但 能被 EC2 用 SSH 连上 —— 这已经满足 90% 的条件了。
一、核心思路(重点)¶
你要做的事情本质只有一句话:
让 EC2 上的 Nginx,把 HTTP 请求转发到 Oracle Cloud 上的 Jenkins
实现方式有两种,强烈推荐第 2 种。
二、方案一(不太推荐):Nginx 直接反代 Oracle Cloud 私网 IP¶
前提¶
- EC2 能直接访问 Oracle Cloud 的 私网 IP:8080
- 中间没有被防火墙 / 安全组 / 路由挡住
server {
listen 80;
server_name jenkins.example.com;
location / {
proxy_pass http://10.0.0.12:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
问题¶
- Oracle 和 AWS 跨云直连通常不稳定
- 一旦 IP / 网络策略变动,很容易炸
- 安全性一般
👉 能跑,但不优雅
三、方案二(强烈推荐):SSH 反向隧道 + Nginx(稳、简单、安全)¶
这是标准玩法,很多公司都是这么暴露内网服务的。
1️⃣ 在 Oracle Cloud 上建立 SSH 反向隧道¶
在 Oracle 的机器上执行:
ssh -N -R 127.0.0.1:18080:127.0.0.1:8080 ec2-user@EC2_PUBLIC_IP
解释一下这句魔法:
-
8080→ Oracle 上 Jenkins -
18080→ 映射到 EC2 本机端口 - Oracle 主动连 EC2(非常关键)
- 公网、NAT、Oracle 防火墙全部绕过
现在等价于:
EC2:18080 ==> Oracle:8080 (Jenkins)
💡 可以用 autossh 保活,防止断线。
2️⃣ EC2 上用 Nginx 反代本地端口¶
server {
listen 80;
server_name jenkins.example.com;
location / {
proxy_pass http://127.0.0.1:18080;
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;
}
}
浏览器访问:
http://jenkins.example.com
你看到的就是 Oracle Cloud 上的 Jenkins 🎉
四、Jenkins 这里一定要注意的坑
这个地方很多人会卡。
1️⃣ Jenkins 地址要改¶
进入 Jenkins:
Manage Jenkins → System → Jenkins URL
设置成:
http://jenkins.example.com
否则:
- 登录跳转会乱
- webhook 会失败
- 插件回调地址错
2️⃣ Jenkins 反代路径问题¶
如果你不是 /,而是 /jenkins,那还要改:
--prefix=/jenkins
不过我建议你:
👉 直接独立一个二级域名,别走子路径
五、安全性评价(你这个方案其实挺安全的)¶
从安全角度看:
✅ Jenkins 不直接暴露公网
✅ Oracle Cloud 无需开 8080 端口
✅ SSH 隧道是加密的
✅ 你还能在 EC2 上加:
- Basic Auth
- IP 白名单
- HTTPS(Let’s Encrypt)
比直接暴露 Jenkins 安全多了。
我个人意见:
Jenkins 就不应该裸奔在公网
六、如果你想再“骚”一点(进阶)¶
你还可以:
-
EC2 上只暴露 443
-
Jenkins 仅允许:
- webhook
- 内网访问
-
Oracle Cloud 当“算力 + 存储”
-
EC2 当“公网跳板 + 安全网关”
这已经是小型生产级架构了。
七、一句总结¶
✔ 能不能?
能,而且是正解。
✔ 推荐方式?
👉 SSH 反向隧道 + EC2 Nginx
✔ 是否安全?
比 90% 的“直接开端口 Jenkins”方案都安全。
如果你愿意,下一步我可以直接帮你:
- 写
autossh + systemd的完整配置 - 或帮你画一份「AWS + Oracle Cloud 混合网络结构图」
- 或顺手帮你把 Jenkins HTTPS 一步到位
你这个思路,本身就已经是“老运维”的味道了 😄
没有任何数据可供显示