You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

远程Jekyll环境部署后浏览器遇SSL协议错误,curl正常求助

解决Jekyll远程访问时浏览器报SSL Protocol Error和bad URI的问题

首先,根据你描述的情况,浏览器访问出错但curl正常,核心原因大概率是浏览器默认尝试用HTTPS访问,但你的Jekyll服务只提供HTTP服务——毕竟Jekyll的serve命令默认是启动纯HTTP的web服务,没有配置SSL证书的话,HTTPS请求必然会触发SSL错误。

下面是一步步的排查和解决步骤:

  • 第一步:确保用HTTP协议访问
    直接在浏览器地址栏输入完整的HTTP地址:http://[你的真实IP]:4000,不要省略http://前缀,也不要写成https://。很多浏览器现在会默认把无协议的地址自动转成HTTPS,这就是你看到SSL错误的主要原因。

  • 第二步:清除浏览器缓存或用无痕模式测试
    如果之前不小心用HTTPS访问过这个地址,浏览器可能会缓存这个跳转规则,即使你输入HTTP也会自动转成HTTPS。这时可以:

    • 清除对应网站的缓存和Cookie(Chrome里可以按F12打开开发者工具,在「Application」标签里清除)
    • 直接用浏览器的无痕/隐私模式打开地址,避免缓存干扰
  • 第三步:确认Jekyll服务正常监听端口
    远程服务器上执行netstat -tulpn | grep 4000(或者ss -tulpn | grep 4000,取决于系统支持),确认输出里有ruby进程监听在你指定的IP的4000端口,比如类似这样的结果:

    tcp        0      0 [你的IP]:4000           0.0.0.0:*               LISTEN      12345/ruby
    

    这能确保服务确实在正确的端口上运行,没有被其他进程占用。

  • 进阶:如果需要HTTPS访问
    如果你必须用HTTPS访问,可以通过两种方式实现:

    1. 用Jekyll自带的SSL参数启动:生成自签名证书(或者用Let's Encrypt的合法证书),然后启动命令改成:
      JEKYLL_ENV=production jekyll serve --host "ip-address" --baseurl "" --ssl-key ./server.key --ssl-cert ./server.crt
      
      不过自签名证书会被浏览器提示不安全,适合测试场景;
    2. 用Nginx做反向代理:在服务器上安装Nginx,配置SSL证书,然后把Nginx的HTTPS请求转发到Jekyll的4000端口,这是生产环境更推荐的方式。

另外,你提到服务器端没有错误日志,这也符合HTTP服务收到HTTPS请求的情况——服务器无法解析HTTPS的请求报文,所以不会输出有效日志,但curl用HTTP请求就能正常响应,完全匹配这个场景。

内容的提问来源于stack exchange,提问作者Danis Fermi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:45:06