![负载均衡器后面的服务器显示状态 200,但客户端显示连接失败](https://linux22.com/image/733756/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E5%90%8E%E9%9D%A2%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%98%BE%E7%A4%BA%E7%8A%B6%E6%80%81%20200%EF%BC%8C%E4%BD%86%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%98%BE%E7%A4%BA%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5.png)
我的 AWS 设置不可靠,我正在尝试找出原因。背景情况是 - 该网站是新的,刚刚在我们的团队中进行测试,但对于我们的一些人来说,它存在持续的问题,具体取决于他们的设备,主要是在 iPhone 上通过浏览器出现的问题。我的问题是这些团队成员是远程的,当我查看我的日志时 - 似乎一切都正常,我也无法在本地重现该错误。
设置如下:
一个别名为应用程序负载均衡器的 Route 53 域
AWS 应用程序负载均衡器(日志如下)向 HTTP 和 HTTPS 的外部连接开放,并自动重定向到 HTTPS。
两个(现在是一个 - 为了更容易调试)EC2 在 Apache 中运行 LAMP 堆栈,仅对 Balancer 的安全组开放(下面的日志)
这负载均衡器日志(摘录-仅是无法连接的 iPhone 中的一行):
h2 2019-02-15T14:35:51.824359Z app/MYAPP/aa921ed4d3be346d 67.247.62.19:55247 172.31.89.211:80 0.001 0.441 0.000 200 200 299 41462 "GET https://www.example.com:443/ HTTP/2.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:495989323513:targetgroup/MYAPPHTTPINTERNALFROMLOADTOEC2/29d1b899c1f7c0b0 "Root=1-5c66ce47-0d87c4f5e9227744bf3cc78e" "www.example.com" "arn:aws:acm:us-east-1:495989323513:certificate/466810d1-3797-4abf-ba26-0865cb14e5b6" 0 2019-02-15T14:35:51.267000Z "forward" "-" "-"
h2 2019-02-15T14:35:52.021618Z app/MYAPP/aa921ed4d3be346d 67.247.62.19:52933 172.31.89.211:80 0.001 0.001 0.000 200 200 208 336 "GET https://www.example.com:443/favicon.ico HTTP/2.0" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 arn:aws:elasticloadbalancing:us-east-1:495989323513:targetgroup/MYAPPHTTPINTERNALFROMLOADTOEC2/29d1b899c1f7c0b0 "Root=1-5c66ce48-b28a362cbdcf892c54bfc23a" "www.example.com" "arn:aws:acm:us-east-1:495989323513:certificate/466810d1-3797-4abf-ba26-0865cb14e5b6" 0 2019-02-15T14:35:52.019000Z "forward" "-" "-"
这阿帕奇日志:
172.31.82.163 - - [15/Feb/2019:14:35:51 +0000] "GET / HTTP/1.1" 200 85507 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1"
172.31.82.163 - - [15/Feb/2019:14:35:52 +0000] "GET /favicon.ico HTTP/1.1" 200 - "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like MacOS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/72.0.3626.101 Mobile/15E148 Safari/605.1
我在这里遇到了困难,因为看起来连接状态为 200。
阅读 ELB 日志的指南在这里 -AWS ELB 访问日志
阅读 Apache 日志的指南在这里 -Apache 访问日志
注意 apache 日志显示没有物体的大小返回给客户端以获取图标,但这是因为该站点尚不存在该图标。
apache 错误日志中没有任何内容,应用程序错误日志中也没有。我连接正常 - 只是我的 iPhone 用户无法连接(我甚至不确定 iPhone 是否造成了差异 - 可能只是巧合)。
错误是这样的:
我的 Apache 设置只是默认设置,httpd.conf
只是将根目录更改为服务我的网站。
下面是(仅我更改了行):
DocumentRoot "/var/www/html/myapp/public/"
#
# Relax access to content within /var/www.
#
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/var/www/html/myapp/public">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>
再次,它对我来说有效,并且对该成员在他的桌面上也有效,但对他(和其他一些成员)的 iPhone 无效。
寻求额外的调试帮助,谢谢。
我确实认为这要么是负载均衡器,要么是路由 53 的问题,因为当这台 iPhone 通过它的 IP 直接连接到 ec2 时(当我暂时放宽那里的安全组设置时)它可以正常加载页面……
嗯...我认为这与此有关:https://stackoverflow.com/questions/47962233/unable-to-access-website-on-safari-ios
答案1
是这样的:HTTPS 不适用于 Safari
将以下内容添加到您的 httpd.conf 进行修复:
<IfModule mod_http2.c>
Protocols h2 http/1.1
Header unset Upgrade
</IfModule>