AWS EB与Docker,Node和Nginx配置问题

时间:2016-09-01 23:46:40

标签: amazon-web-services nginx docker elastic-beanstalk

在AWS上,我已配置Elastic BeanStalk以部署在Elastic Load Balancer后面运行Dockerized Node应用程序的多个EC2实例。此外,我还有AWS证书管理员工作,并通过SSL通过https加载网站。以下是我要完成的任务:

  1. 自动将非www重定向到www.domain.com
  2. 自动将http重定向到https
  3. 我正在尝试使用NGINX来完成此任务,并且我希望进行自动处理,以便通过扩展规则旋转的新实例自动包含此配置。

    经过一番研究,我发现有些人通过项目根目录中的.ebextensions / nginx.config文件来完成此任务。

    这是我的nginx覆盖配置文件:

    files:
      /etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf:
        mode: "000644"
        owner: root
        group: root
        content: |
           map $http_upgrade $connection_upgrade {
                  default        "upgrade";
                  ""            "";
              }
              server {
            listen 80;
            return 301 https://www.$host$request_uri;
    
              }
    
              server {
                  listen 443 ssl;
    
                gzip on;
                gzip_comp_level 4;
                gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    
                  if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
                      set $year $1;
                      set $month $2;
                      set $day $3;
                      set $hour $4;
                  }
                  access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
    
                  access_log    /var/log/nginx/access.log;
    
                  location / {
                      proxy_pass            http://docker;
                      proxy_http_version    1.1;
    
                      proxy_set_header    Connection            $connection_upgrade;
                      proxy_set_header    Upgrade                $http_upgrade;
                      proxy_set_header    Host                $host;
                      proxy_set_header    X-Real-IP            $remote_addr;
                      proxy_set_header    X-Forwarded-For        $proxy_add_x_forwarded_for;
                  }
              }
    

    节点应用程序在端口3000上的docker容器中运行,并且该端口已公开。

    四个问题:

    1. 这是使用AWS执行此操作的正确方法吗?
    2. 这个nginx配置文件是否正确(重定向到www和https)?
    3. 我在NGINX配置中是否需要其他SSL证书?我在域级别使用AWS Certification Manger
    4. 重定向会搞砸健康检查并终止自动部署吗?
    5. 当然,最大的问题是我无法让AWS接受这种配置。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为使用AWS内置功能可以更轻松地简化您的Nginx配置。

证书

使用AWS Certificate Manager,您可以将证书加载到ELB上作为其配置的一部分,而不是EC2实例。

ACM SSL Certificates for Elastic Load Balancers

重定向Apex域/ SSL

对于重定向,请使用Route53 www中的别名重定向到DNS中的ELB。 ELB在其配置中包含将http重定向到https。请注意,http(s)://yourdomain.com(无www或子域名)称为APEX域,并且有一些限制。使用alias到ELB是AWS中支持的重定向方法。

  

Q值。我可以在我的Elastic Load Balancer上指向我的区域顶点(example.com与www.example.com)吗?

     

是。 Amazon Route 53提供了一种特殊类型的记录,称为“别名”记录,可让您将区域顶点(example.com)DNS名称映射到ELB DNS名称(即elb1234.elb.amazonaws.com)。由于扩展,缩小或软件更新,与Amazon Elastic Load Balancers关联的IP地址可能随时发生变化。路由53响应具有负载均衡器的一个或多个IP地址的别名记录的每个请求。对映射到ELB负载平衡器的别名记录的查询是免费的。这些查询在Amazon Route 53使用情况报告中列为“Intra-AWS-DNS-Queries”。

Amazon Route 53 FAQs