负载均衡器后面的服务器显示状态 200,但客户端显示连接失败

负载均衡器后面的服务器显示状态 200,但客户端显示连接失败

我的 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>

相关内容