在AWS上,我已配置Elastic BeanStalk以部署在Elastic Load Balancer后面运行Dockerized Node应用程序的多个EC2实例。此外,我还有AWS证书管理员工作,并通过SSL通过https加载网站。以下是我要完成的任务:
我正在尝试使用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容器中运行,并且该端口已公开。
四个问题:
当然,最大的问题是我无法让AWS接受这种配置。我做错了什么?
答案 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”。