nginx反向代理,safari无法访问网站(HTTP/2.0请求超时)的解决办法

作者:光算云 时间:2021-09-12 02:33:11 阅读:208

昨天半夜IOS端开发者发现请求API无法拿到response,一直是timeout。

排除了网络的原因,排除了客户端的原因,因为客户端请求其他的API都是成功的。

一、问题

IOS 开发使用 NSURLconnection 发送 HTTP POST请求的时候,一直timeout。

继而发现safari无法访问网站,但是chrome和其他的浏览器都没有任何问题。

提前说一下,这个问题出现在 ngixn-1.9.0+/apache2.4 反向代理

我的服务器是 LANMP 组合的,其中 nginx 版本是 1.12.0 ,而apache的版本是 2.4

二、排查过程

1. 检查服务器通讯和网络原因

首先发现IOS端能够ping通服务器,但是新问题出现了safari无法访问网站,同样的网站chrome中能够访问。

2. 客户端排查

IOS客户端开发者请求同样的https API ,发现能够拿到response,只有我的网站不行。

3. 网站系统排查

试了好几个API测试平台以及各种浏览器,发现都没有问题,最后发现:

苹果原生的应用 如safari,无论是 IOS 的 safari 还是 max osx 的 safari 都无法访问网站

4. 排查SSL问题

因为我用的是 Let's Encrypt 的 SSL 证书,因此测试了我其他使用SSL证书网站能否在 safari 中打开,发现都没问题。

5. 进一步排查网站系统

在排查过程中,发现当访问纯静态页面,如 https://www.demo.com/index2.html 的时候,没有任何问题,能够正常访问。

但是如果访问动态页面,如 https://www.demo.com/index2.php的时候,都是错误的,也就是说 phpinfo() 都无法访问。

因此感觉问题可能出现在 nginx 或者是 apache 上

6. 各种查资料

为此我在 segmentfault.com 上提问的问题也编辑了很多次,问清了IOS开发方面的一些概念后,最后确定了问题出现服务器方面。

所以在 stackoverflow 上各种关键字查,主要查的是

  • nginx

  • safari can not open website

在一个提问中发现,HTTP2可能存在问题,因此我看了一下我的网站的log,nginx.log 和 apache.log 我都配置了。

不看不知道,吓一跳:

1)demo.com_apache.log 中都是正常的200请求:

980871222-592a7c945d0c0_articlex.png

2)demo.com_nginx.log 中也都正常,但是需要注意的是:

  1. 请求都是 HTTP/2.0 请求

  2. 访问一次网站,会出现好几十甚至一百次链接请求(这个我把日志清空后,访问一次,nginx访问日志就出现了N多条)

  3. 请求都是200的

1.png

7. 确定了问题最终出现在nginx上面,而且是反向代理的问题。

三、解决

前后折腾了将近一天,最后在 stackoverflow 上找到了同样的问题,问题说:

safari 因为使用HTTP/2.0 请求而拿不到response

其中提到了我在别的问题中也看到的一个内容,已经有人在nginx中讨论过这个问题:

【"Upgrade" header should not be proxied over h2】

隐藏 Nginx 的 Upgrade header

具体为什么,可以去nginx上的讨论看看,很详细。

操作:

修改 nginx proxy配置中 proxy_hide_header 成 Upgrade

proxy_hide_header Upgrade


linux软链接和硬链接详解

硬链接硬链接是通过索引节点进行的链接。在Linux中,多个文件指向同一个索引节点是允许的,像这样的链接就是硬链接。硬链接只能在同一文件系统中的文件之间进行链接,不能对目录进行创建。如果删除硬链接对应的源文件,则硬链接文件仍然存在,而且保存了原有的内容,这样可以起到防止因为误操作而错误删除文件的作用。由于硬链接是有着相同 inode 号仅文件名不同的文件,因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。硬链接可由命令 link 或 ln 创建,如:link oldfile newfile  ln oldfile newfile符号链接软链接(也叫符号链接)与硬链接不同,文件用户数据块中存放的内容是另一文件的路径名的指向。软链接就是一个普通文件,只是数据块内容有点特殊。软链接可对文件或目录创建。软链接主要应用于以下两个方面:一是方便管理,例如可以把一个复杂路径下的文件链接到一个简单路径下方便用户访问;另一方面就是解决文件系统磁盘空间不足的情况。例如某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中,这样就可以很好的解决空间不足问题。删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接。使用-s选项的ln命令即可创建符号链接,命令如下:ln -s old.file soft.link ln -s old.dir soft.link.dir拓展inode叫做索引节点号,这是Linux文件系统管理文件的方式。在建立文件系统时,会建立一个索引节点表,里面包含一定数量的索引节点。每当建立一个文件时,就会为他分配一个索引节点号,相当于文件的地址。

作者:光算云 时间:2021-09-06 18:08:32 阅读:59

织梦不支持php7.1和7.3版本解决方法

一、 无法获取错误信息,一片空白,一片空白是无法调试的,所以要做的第一件事,能够输出错误信息。打开 include/common.inc.php找到下面的代码//error_reporting(E_ALL);error_reporting(E_ALL || ~E_NOTICE);改为error_reporting(E_ALL);//error_reporting(E_ALL || ~E_NOTICE);主要作用是打开错误提示。二、 ‘continue’ not in the ‘loop’ or ‘switch’ context错误你刷新后可能遇到这个错误Fatal error: ‘continue’ not in the ‘loop’ or ‘switch’ context in ….include/common.func.php on line 49上面表示include/common.func.php 这个文件的49行有错误,把 continue; 删除,改为 return;即可三、 函数mysql_query()未定义mysql_*的系列函数在php7中不能再使用,会出现下面的错误Fatal error: Uncaught Error: Call to undefined function mysql_query() in ….include/dedesql.class.php:152php7中需要使用mysqli或者pdo的方式,跟数据库通信,更安全更高效。解决的方法打开文件 data/config.cache.inc.php$cfg_mysql_type = ‘mysql’;改为$cfg_mysql_type = ‘mysqli’;四、后台左侧菜单空白不显示解决办法方法一将data目录权限设置为777或者755,注意是整个data目录,设置完毕刷新即可。方法二进入data/tplcache,备份一份,然后除了index.html以外全部删除,接着将data/tplcache目录设置为777,刷新即可。写在最后:以上就是php7不兼容dedecms的详细内容,教程亲测可用,希望对大家有帮助。

作者:光算云 时间:2021-09-06 18:01:57 阅读:62

HTTP状态查询,HTTP状态码含义,HTTP头部信息查询

HTTP状态码说明:消息(1字头)服务器收到请求,需要请求者继续执行操作状态码 状态码英文名称 中文描述100 Continue 继续。客户端应继续其请求101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议102 Processing 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。成功(2字头)操作被成功接收并处理状态码 状态码英文名称 中文描述200 OK 请求成功。一般用于GET与POST请求201 Created 已创建。成功请求并创建了新的资源202 Accepted 已接受。已经接受请求,但未处理完成203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域206 Partial Content 部分内容。服务器成功处理了部分GET请求207 Multi-Status 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。重定向(3字头)需要进一步的操作以完成请求状态码 状态码英文名称 中文描述300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替302 Move temporarily 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI303 See Other 查看其它地址。与301类似。使用GET和POST请求查看304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源305 Use Proxy 使用代理。所请求的资源必须通过代理访问306 Unused 已经被废弃的HTTP状态码307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向请求错误(4字头)客户端错误,请求包含语法错误或无法完成请求状态码 状态码英文名称 中文描述400 Bad Request 客户端请求的语法错误,服务器无法理解401 Unauthorized 请求要求用户的身份认证402 Payment Required 保留,将来使用403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面405 Method Not Allowed 客户端请求中的方法被禁止406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权408 Request Time-out 服务器等待客户端发送的请求时间过长,超时409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息412 Precondition Failed 客户端请求信息的先决条件错误413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理415 Unsupported Media Type 服务器无法处理请求附带的媒体格式416 Requested range not satisfiable 客户端请求的范围无效417 Expectation Failed 服务器无法满足Expect的请求头信息服务器错误(5字头)服务器在处理请求的过程中发生了错误状态码 状态码英文名称 中文描述500 Internal Server Error 服务器内部错误,无法完成请求501 Not Implemented 服务器不支持请求的功能,无法完成请求502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

作者:光算云 时间:2021-09-06 17:56:07 阅读:118

关闭Windows 10 右下角天气新闻资讯栏

在最近的某次关机更新系统后,Windows 10 的右下角多了个天气的资讯栏。本来是懒得去关闭它, 显示就显示在那里吧, 还能打开电脑就能顺便看到天气也不错(360不是也有类似弹窗吗?)。但是这玩意也太多问题了,是不是就把任务栏卡死了。目前我遇到的问题:鼠标移动到区域后,弹窗加载导致整个任务栏卡死;鼠标在天气资讯栏右键想打开任务栏设置,然后又卡死;还是先关闭这个显示吧,目前在我的使用场景,关了也不影响什么。在任务栏右键,点击资讯和兴趣,再点击关闭就可以关掉了。如果因为鼠标滑过区域影响平时阅读或玩游戏,可以去掉悬停时打开的勾选。

作者:光算云 时间:2021-09-06 18:09:04 阅读:75

centos 7 添加更新源

CentOS 7 中yum安装某些软件版本太低可以添加yum源使用其他的yum源,我们这里就使用IUS源。IUS is a yum repository that provides newer versions of select software for RHEL and CentOS.它为CentOS按RHEL提供最新软件版本的yum源。1.配置IUS yum源vim /etc/yum.repos.d/ius-7.repo[ius]name = IUS for Enterprise Linux 7 - $basearchbaseurl = https://repo.ius.io/7/$basearch/enabled = 1repo_gpgcheck = 0gpgcheck = 1gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7[ius-debuginfo]name = IUS for Enterprise Linux 7 - $basearch - Debugbaseurl = https://repo.ius.io/7/$basearch/debug/enabled = 0repo_gpgcheck = 0gpgcheck = 1gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7[ius-source]name = IUS for Enterprise Linux 7 - Sourcebaseurl = https://repo.ius.io/7/src/enabled = 0repo_gpgcheck = 0gpgcheck = 1gpgkey = https://repo.ius.io/RPM-GPG-KEY-IUS-7 2. 清理缓存:yum clean all3. 更新缓存:yum makecache fast

作者:光算云 时间:2021-09-07 09:37:52 阅读:129

关注微信公众号

客服服务

商户信誉:
服务时间:周一~周六 上午10:00 - 12:00 下午14:00 - 18:00
中午休息12:00-14:00 → 不售后!
下班后,周日,假期 → 不定时售后!
回到顶部
立即咨询

添加客服

快速咨询

扫一扫添加微信

添加客服微信

1599090123

周一至周六 9:00~18:00

ICP备案:粤ICP备13024006号

Copyright © 1998 - 2021 All Rights Reserved. 光算科技 版权所有