项目

一般

简介

行为

Support #30

打开

如果我的ec2可以用ssh链接到oraclecloud,但是oraclecloud无法暴露http到公网,我能否用ec2的nginx代理oraclecloud上启动的jenkins?

heliang大约 2 个月 之前添加.

状态:
New
优先级:
Normal
指派给:
开始日期:
2026-01-15
计划完成日期:
2026-01-30 (31 天 延期)
% 完成:

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 一步到位

你这个思路,本身就已经是“老运维”的味道了 😄

没有任何数据可供显示

行为

导出 Atom PDF