【发布时间】:2021-06-23 10:51:35
【问题描述】:
刚开始学习 AWS,我有一个运行 apache Web 服务器的 EC2,提供一个简单的页面。我前面有一个经典的负载均衡器和一个指向负载均衡器的 dns 名称的路由 53 cname。
如果我在浏览器中输入 ec2 的 IP 地址,我会得到我的网页 如果我输入负载均衡器的 dns 名称,我会得到我的网页
但是当我输入我的路由 53 的 dns 名称时,它不起作用,出现“无法访问此站点”错误。
我的实例的 cloudformation 如下,xxxx 屏蔽了我无法共享的部分。:
AWSTemplateFormatVersion: 2010-09-09
Description: EC2 with Route53 and Load Balancer
Parameters:
AWSAccount:
Default: sandbox
Description: Which AWS Account?
AllowedValues:
- sandbox
Type: String
AMI:
Default: ami-0d712b3e6e1f798ef
Description: what AMI will be deployed in the cluster?
Type: 'AWS::EC2::Image::Id'
Name:
Default: xxxxxxxx-xxxtraining
Description: Instance Name
Type: String
ProjectName:
Default: xxxxxxxx
Description: Use your project tag.
Type: String
ContactEmail:
Default: xxxxxxxxxxx
Description: Your Email
Type: String
CName:
Default: xxxxxxx-xxxtraining
Description: appended with domainame.
Type: String
EC2InstanceType:
Default: t3.small
Description: Instance Type
Type: String
EC2KeyName:
Default: xxxxxxxxxxxxxxx
Description: The EC2 Key Pair to allow SSH access to the instances
Type: 'AWS::EC2::KeyPair::KeyName'
ConstraintDescription: Must be the name of an existing EC2 Key Pair.
Mappings:
sandbox:
eu-west-1:
ServiceDNSZone: sandbox.aws.xxxxxxx.com.
DbDNSZone: sandbox.aws.xxxxxxx.com.
ServiceCNAMESuffix: sandbox.aws.xxxxxx.com.
SSLCert: >-
xxxxxxxxxxx
VpcId: vpc-xxxxxxxxxxx
PrivateSubnetIDs:
- subnet-xxxxxxxx
- subnet-xxxxxxxx
- subnet-xxxxxxxx
PublicSubnetIDs:
- subnet-xxxxxxxx
- subnet-xxxxxxxx
- subnet-xxxxxxxx
VPCSubnetMask: 10.41.0.0/16
prod:
eu-west-1:
VpcId: vpc-xxxxxx
ServiceDNSZone: xxxxxxtools.net.
ServiceCNAMESuffix: xxxxxxtools.net.
DbDNSZone: prod.aws.xxxxxx.com.
SSLCert: >-
xxxxxxxxxx
PrivateSubnetIDs:
- subnet-xxxxxxx
- subnet-xxxxxxx
- subnet-xxxxxxx
PublicSubnetIDs:
- subnet-xxxxxxx
- subnet-xxxxxxx
- subnet-xxxxxxx
VPCSubnetMask: 10.51.0.0/16
Resources:
EC2Instance:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref AMI
InstanceType: !Ref EC2InstanceType
KeyName: !Ref EC2KeyName
SecurityGroupIds:
- !Ref EC2InstanceSecurityGroup
SubnetId: !Select
- '0'
- !FindInMap
- !Ref AWSAccount
- !Ref 'AWS::Region'
- PrivateSubnetIDs
Tags:
- Key: Name
Value: !Ref Name
- Key: Project
Value: !Ref ProjectName
- Key: Contact
Value: !Ref ContactEmail
- Key: StackName
Value: !Ref 'AWS::StackName'
UserData: !Base64
'Fn::Join':
- ''
- - |
#!/bin/bash
- |
yum -y update
- >
yum -y install wget vim nano curl unzip firewalld bash-completion
httpd yum-cron
- '/opt/aws/bin/cfn-init -v '
- ' --stack '
- !Ref 'AWS::StackName'
- ' --resource EC2Instance '
- ' --region '
- !Ref 'AWS::Region'
- |+
- >
hostnamectl set-hostname xxxxxxxxxxx
--static
- |
systemctl enable firewalld
- |
systemctl start firewalld
- |
firewall-cmd --add-port=8080/tcp --permanent
- |
firewall-cmd --add-port=22/tcp --permanent
- |
firewall-cmd --add-port=80/tcp --permanent
- |
firewall-cmd --reload
- |
systemctl enable httpd
- |
systemctl start httpd
- >
sed -i 's/update_cmd = default/update_cmd = security/g'
/etc/yum/yum-cron.conf
- >
sed -i 's/apply_updates = no/apply_updates = yes/g'
/etc/yum/yum-cron.conf
- |
systemctl enable yum-cron
- |
systemctl start yum-cron
- |
echo “Hello World from $(hostname -f)” > /var/www/html/index.html
EC2InstanceSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupDescription: Security Group for EC2Instance
VpcId: !FindInMap
- !Ref AWSAccount
- !Ref 'AWS::Region'
- VpcId
Tags:
- Key: Name
Value: !Join
- '-'
- - !Ref 'AWS::StackName'
- EC2InstanceSecurityGroup
- Key: Project
Value: !Ref ProjectName
- Key: Contact
Value: !Ref ContactEmail
- Key: StackName
Value: !Ref 'AWS::StackName'
SecurityGroupIngress:
- IpProtocol: TCP
FromPort: 22
ToPort: 22
CidrIp: 10.0.0.0/8
- IpProtocol: TCP
FromPort: 8080
ToPort: 8080
CidrIp: 10.0.0.0/8
- IpProtocol: ICMP
FromPort: -1
ToPort: -1
CidrIp: 10.0.0.0/8
- IpProtocol: TCP
FromPort: 443
ToPort: 443
CidrIp: 10.0.0.0/8
- IpProtocol: TCP
FromPort: 80
ToPort: 80
CidrIp: 10.0.0.0/8
Route53:
Type: 'AWS::Route53::RecordSet'
Properties:
HostedZoneName: !FindInMap
- !Ref AWSAccount
- !Ref 'AWS::Region'
- ServiceDNSZone
Comment: CNAME for ELB
Name: !Join
- .
- - !Ref CName
- !FindInMap
- !Ref AWSAccount
- !Ref 'AWS::Region'
- ServiceCNAMESuffix
Type: CNAME
TTL: '300'
ResourceRecords:
- !GetAtt
- LoadBalancer
- DNSName
LoadBalancer:
Type: AWS::ElasticLoadBalancing::LoadBalancer
Properties:
Instances:
- !Ref EC2Instance
Listeners:
- LoadBalancerPort: '80'
InstancePort: '80'
Protocol: HTTP
HealthCheck:
Target: HTTP:80/
HealthyThreshold: '3'
UnhealthyThreshold: '5'
Interval: '30'
Timeout: '5'
Subnets:
- !ImportValue PrivateSubnetA
- !ImportValue PrivateSubnetB
- !ImportValue PrivateSubnetC
Scheme: internal
SecurityGroups:
- !Ref EC2InstanceSecurityGroup
Outputs:
URL:
Description: The URL of the webserver
Value: !Ref Route53
EC2InstanceID:
Description: EC2 Instance ID
Value: !Ref EC2Instance
EC2InstanceIPAdress:
Description: Instance Private DNS Name
Value: !GetAtt EC2Instance.PrivateIp
【问题讨论】:
-
您好,您应该将负载均衡器作为 A 记录添加到 Route 53,因为负载均衡器没有特定的公共 IP 地址,它有多个公共 IP 地址。所以 CNAME 不起作用。
-
我尝试了一条带有 EC2 的 IP 地址的 A 记录,以及一条带有负载均衡器 dns 名称别名的单独 A 记录,但没有任何乐趣。 apache 中是否存在我缺少的设置来让它监听来自 53 号路由地址的请求?
标签: amazon-web-services apache amazon-route53