如何通过SSH隧道实现本地系统服务的外部HTTPS访问?
方案说明
两种实现方式都可以达成通过https://你的域名(域名需解析到VPS公网IP)访问本地服务的目标,具体差异和操作如下:
方式1:沿用你现有直接反向隧道绑定443端口的逻辑,证书部署在本地设备
- 操作流程:
- 先将你要使用的访问域名解析到VPS的公网IP
- 在本地设备上申请对应域名的Letsencrypt证书,推荐用DNS验证模式,无需本地暴露公网端口
- 编辑本地Apache的
ssl.conf配置,启用8443端口的SSL监听,将申请到的证书、私钥、证书链路径对应填入配置并重启Apache - 本地执行你计划的隧道命令即可生效:
ssh -R 443:127.0.0.1:8443 root@VPS
- 注意事项:需要确保VPS的443端口没有被其他服务(比如Nginx、自带的Apache)占用,否则隧道会绑定失败
- 特点:VPS仅做流量透传不需要额外配置,缺点是证书的申请、续期都要在本地操作,如果你经常更换作为服务端的移动设备会比较繁琐
方式2(更推荐):证书部署在VPS上,VPS加一层反向代理
- 操作流程:
- 先将你要使用的访问域名解析到VPS的公网IP
- 在VPS上安装Nginx,使用Letsencrypt的certbot工具一键申请对应域名的证书,certbot会自动完成Nginx的SSL配置,且默认开启自动续期
- 调整本地的反向隧道命令,不需要绑定443端口,改成绑定本地Web端口到VPS本地的空闲端口即可:
ssh -R 10080:127.0.0.1:8080 root@VPS - 修改VPS上的Nginx配置,将443端口的请求反向代理到
127.0.0.1:10080,重载Nginx配置即可生效
- 特点:本地Apache只需要跑普通HTTP服务,不需要做任何SSL相关配置,证书的全生命周期管理都在VPS上完成,更换本地服务设备不需要改动证书配置,后续要加限流、缓存、多站点映射等功能也可以直接在VPS上配置,扩展性更强
内容的提问来源于stack exchange,提问作者php and js
相关产品推荐
相关产品推荐

