如何通过ngrok企业版实现本地Rails应用HTTPS自定义域名无证书异常访问?
1. 停止当前运行的服务
先关闭正在运行的Rails服务器和ngrok进程,避免端口占用冲突。
2. 以普通HTTP模式启动Rails应用
无需在本地启用SSL,ngrok会负责外部访问的HTTPS加密,本地Rails与ngrok的通信在机器内部完成,无需额外加密(若有本地安全需求可后续调整,先解决证书错误核心问题)。
执行命令:
rails s -b localhost:3000
若需要允许所有IP访问以便测试,可改用:
rails s -b 0.0.0.0:3000
3. 用ngrok HTTP隧道转发到Rails端口
使用ngrok http命令并指定自定义域名,ngrok会自动为该域名提供合法的SSL证书,外部访问时不会出现证书错误。
执行命令:
ngrok http --domain=my.domain.com 3000
启动完成后,外部用户访问https://my.domain.com时,ngrok会处理HTTPS连接并将请求转发到本地Rails的3000端口(HTTP),浏览器会识别到ngrok提供的合法证书,不会再触发NET::ERR_CERT_COMMON_NAME_INVALID错误。
错误原因说明
你之前使用ngrok tls隧道时,它会将外部的TLS流量直接转发到本地的TLS服务(Rails 3000端口,使用localhost自签证书)。此时浏览器访问my.domain.com,虽然ngrok建立了HTTPS连接,但本地Rails返回的证书域名是localhost,与访问的my.domain.com不匹配,因此浏览器抛出证书域名不匹配的错误。
额外说明(若需本地Rails启用HTTPS)
如果一定要让本地Rails运行在HTTPS下,你需要获取与my.domain.com匹配的证书,但该证书由ngrok管理,无法获取私钥。因此最合理的方案仍是让ngrok处理外部HTTPS,内部用HTTP通信,这也是ngrok最常用的配置方式,既简单又能保证外部访问的安全性。
内容的提问来源于stack exchange,提问作者sckdd

