【问题标题】:Apache web server works when loadbalancer dns name is used, but not Route53 pointing at load balancerApache Web 服务器在使用负载均衡器 dns 名称时工作,但不是 Route53 指向负载均衡器
【发布时间】: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


【解决方案1】:

为了让您的 route53 托管区域在公共互联网上可用,它必须将公共域绑定设置为域注册商的 NS 记录。

【讨论】:

  • 抱歉,应该提一下 - 我们有自己的 VPC,可以直接连接到 AWS,而且我在使用我们的 VPN 还会这样吗?
  • 路线 53 是私有托管还是公共托管?
猜你喜欢
  • 2017-06-12
  • 2013-08-26
  • 1970-01-01
  • 2021-12-07
  • 2020-05-29
  • 1970-01-01
  • 2021-02-05
  • 2017-09-25
  • 1970-01-01
相关资源
最近更新 更多