我在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。
答案 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。主机名,此内部解析将遵循。