【问题标题】:iOS 11 devices fail to access nginx HTTPS site secured with LetsEncrypt (Protocol error)iOS 11 设备无法访问使用 LetsEncrypt 保护的 nginx HTTPS 站点(协议错误)
【发布时间】:2018-04-02 16:08:22
【问题描述】:

几天以来,刚更新到 iOS 11 的用户无法访问我的网站。 它通过使用 LetsEncrypt 提供 SSL 的 nginx 反向代理托管。

客户体验是,如果您单击链接,Safari 窗口通常会消失或显示一般错误。

使用调试器,出现错误:[Error[ Failed to load resource: The operation could not be completed。协议错误

这仅在 iOS 11 更新后的 iOS 设备上发生。

我的服务器在 DigitalOcean 上运行,docker 映像为 jwilder/nginx-proxy

【问题讨论】:

  • 这也发生在 Apache 上。

标签: docker nginx https ios11 lets-encrypt


【解决方案1】:

好的,我实际上发现这个问题与 iOS11 中 HTTP2 的不正确实现有关。

这篇文章阐明了一些情况: http://www.essential.exchange/2017/09/18/ios-11-about-to-release-things-to-be-aware-of/

jwilder/nginx-proxy docker 镜像默认使用 http2,据我所知,您也无法更改。

不,要解决此问题,请暂时删除服务器配置中的 http2 关键字。

这个:

server {
  listen x.x.x.x:443 ssl http2;
  server_name xxxx;
  [...]
}

变成:

server {
  listen x.x.x.x:443 ssl;
  server_name xxxx;
  [...]
}

如果你正在运行 jwilder/nginx-proxy,你也必须更改 /app/nginx.tmpl,否则,配置文件将被重写一次点。

希望这个答案能帮助一些在同样问题上苦苦挣扎的人。 如果您找到解决此问题的其他解决方案,请在下方添加。我没有太多时间来寻找解决方案,因为我花了很长时间才找到这个解决方案。

【讨论】:

  • 这是一个隐蔽且难以诊断的问题,特别是对于使用 Windows 计算机且手边没有 Mac 的人。这不仅仅是一个 Docker 问题。使用 SSL 证书与 HTTP/2 服务器交互时,这是一个 iOS 问题。更普遍的症状是,所有类型的 iOS 浏览器(Safari、Chrome)都静默加载网页失败,除了加载失败之外没有任何错误消息。检测问题的唯一方法是在 Safari 中使用 Web Inspector(如果您没有 Mac,祝您好运)。
  • 它也不限于Nginx;在 Apache 中,Apache 中的解决方案是这样禁用 HTTP/2: # 默认启用 HTTP/2 # # httpd.apache.org/docs/2.4/mod/core.html#protocols # # Protocols h2 h2c http/1.1 #跨度>
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 2018-08-08
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多