【问题标题】:ec2 instance can't connect to websitesec2 实例无法连接到网站
【发布时间】:2019-12-27 10:38:44
【问题描述】:

我创建了一个 ec2 实例用于网络抓取。但是,我无法使用 selenium 抓取任何网站,因为出现以下错误:

“selenium.common.exceptions.TimeoutException:消息:连接被拒绝”错误。

我认为这与阻止网站的安全组设置有关。于是我根据this新建了一个安全组。但是,在这样做之后,我无法再通过 ssh 进入 EC2 实例。

我的 EC2 实例需要什么配置才能抓取网站?

【问题讨论】:

  • 这是在默认 VPC 中吗?实例所在子网使用的路由表是否有 Internet 网关?您可以发布安全组和路由表中的规则吗?
  • 您在 EC2 或外部使用 selenium 吗?

标签: python-3.x amazon-web-services amazon-ec2


【解决方案1】:

要访问 SSH,您需要修改安全组,如下图所示:

要访问 HTTP(80 端口)或 HTTPS(443 端口),您需要添加如下规则:

检查这两个规则是否启用。这些都是入站规则。

【讨论】:

    【解决方案2】:

    我假设您在 Amazon EC2 实例上使用 Selenium。

    您的 Inbound 安全组设置与 Selenium 无关,但您可能想要登录到实例。因此,您的入站安全组应允许端口 22(对于 Linux)或端口 3389(对于 Windows RDP)。

    要允许实例上的 Selenium 应用访问 Internet,您可以为 Outbound 安全组使用默认的“全部允许”设置:所有流量、所有端口、目的地 = 0.0.0.0/0

    您尝试抓取的网站可能已阻止了 Amazon EC2 实例的 IP 地址范围。 (始终根据网站的使用条件进行操作!)您可以通过连接到 Amazon EC2 实例然后尝试检索一些网站来进行测试,例如:

    curl www.google.com
    

    应返回 HTML 页面的内容。

    然后,尝试使用您打算抓取的网站之一来验证该实例是否可以访问该网站。

    【讨论】:

    • 我尝试为我的子网创建一个新的互联网网关,并按照您所说的允许所有入站和出站。这些都不起作用。但是,当我创建了一个谷歌云 Vm 实例并允许 http 和 https 时,它可以在那里工作。
    • 您之前有创建 EC2 实例的经验吗?如果您可以登录到实例,则网络端工作正常(只需确认安全组允许所有出站访问)。你能登录和使用curl吗?
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 2013-05-26
    • 2012-12-26
    • 2021-09-22
    • 2018-01-03
    • 2016-08-24
    • 2021-06-05
    相关资源
    最近更新 更多