无法从实例本身中获取虚拟主机

时间:2015-09-16 11:29:32

标签: php amazon-ec2 wkhtmltopdf

我在Ec2实例上设置LAMP并设置虚拟主机,例如

<VirtualHost *:80 >
    ServerName xx.xx.xx.xx
    ServerAdmin test@example.com
    DocumentRoot /var/www/dir1

..
..
</VirtualHost>

我可以公开访问vhost内容。但是,当我ssh到实例和 尝试:wget xx.xx.xx.xx(公共IP),似乎没有解决。我需要一种方法来在本地解析它以使用wkhtmltopdf生成pdf。

1 个答案:

答案 0 :(得分:0)

EC2内容无法通过实例本身内的公共IP地址访问。

Internet Gateway在您分配的公共IP和实际绑定到您的堆栈的私有IP之间进行静态1:1网络地址转换。使用其公共IP访问您的实例需要通过Internet网关进行发夹连接,这是不受支持的。

您可以使用ec2metadata命令和--local-ipv4选项获取实例的IP地址,并将其包含在命令行中:

$ wget http://$(ec2metadata --local-ipv4)/path/goes/here 

或者稍微更高级......您可以更改DNS的配置方式,只要您的主机名不在区域顶点(例如,这适用于api.example.com或{{ 1}}但不是裸域www.example.com)。

如果您将DNS配置为使用CNAME记录,则类似这样......

example.com

...其中ec2 -...是EC2指定的公共IP主机名(您可以使用www CNAME ec2-54-xx-xx-xx.compute-1.amazonaws.com. 或在控制台中找到它,在其中称为&#34;公共DNS&#34;)。

如果以这种方式配置DNS,并且您拥有enabled DNS hostnames in your VPC,那么如果从外部您的VPC查询,您的主机名将解析为外部 IP地址,但是如果从您的VPC中的 中查询,则会解析为内部 IP地址。 (这也适用于EC2 Classic)。

使用此配置,您可以使用主机名在内部访问您的实例,但外部查找也可以继续使用。

为那些可能不熟悉此功能的人说明这一点:

从VPC内部查询,它解析为私有地址:

ec2metadata --public-hostname

使用Google的公共DNS服务器从VPC外部查询:

$ dig ec2-54-xxx-xxx-xxx.compute-1.amazonaws.com
ec2-54-xxx-xxx-xxx.compute-1.amazonaws.com. 60 IN A 172.31.yyy.yyy

如果您的公共主机名是指向&#34; ec2 -...&#34;的CNAME。主机名,此内部解析将遵循。