Amazon web services AWS负载平衡器&x2B;Nginx+;gunicorn-如何使用ssl
我正在尝试使用docker机器创建ec2实例,其堆栈为nginx+gunicorn+django。我有一个面向internet的应用程序负载平衡器,它有两个目标组(绿色/蓝色),以防止在新部署中出现任何停机(新部署部署部署到未使用的组中,并且在所有内容都签出时更改负载平衡器组) 端口80的一切工作都很完美,但当我试图为端口443添加一个侦听器,并为该域添加一个Amazon颁发的证书时,我无法让它工作。我是否也需要从Nginx内部获得证书?我需要Nginx来监听端口443吗?目标 负载平衡器:Amazon web services AWS负载平衡器&x2B;Nginx+;gunicorn-如何使用ssl,amazon-web-services,nginx,Amazon Web Services,Nginx,我正在尝试使用docker机器创建ec2实例,其堆栈为nginx+gunicorn+django。我有一个面向internet的应用程序负载平衡器,它有两个目标组(绿色/蓝色),以防止在新部署中出现任何停机(新部署部署部署到未使用的组中,并且在所有内容都签出时更改负载平衡器组) 端口80的一切工作都很完美,但当我试图为端口443添加一个侦听器,并为该域添加一个Amazon颁发的证书时,我无法让它工作。我是否也需要从Nginx内部获得证书?我需要Nginx来监听端口443吗?目标 负载平衡器: +
+------------+-----------------------------+----------------+
| Listener ID| Rules. | SSL Certificate|
+------------+-----------------------------+----------------+
| HTTP: 80 | Default: forwarding to blue.| N/A. |
+------------+-----------------------------+----------------+
| HTTPS: 443 | Default: forwarding to blue.|Default: (ACM). |
+------------+-----------------------------+----------------+
目标:
+------------+--------------+--------------+--------------+---------------+
| Name | Port | Protocol | Target type | Load Balancer |
+------------+--------------+--------------+--------------+---------------+
| Blue | 80 | HTTP | instance | loadbalancer |
+------------+--------------+--------------+--------------+---------------+
| Green | 80 | HTTP | instance | |
+------------+--------------+--------------+--------------+---------------+
我的Nginx配置:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
upstream app {
server django:5000;
}
server {
listen 80;
charset utf-8;
location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}
location / {
try_files $uri @proxy_to_app;
}
# django app
location @proxy_to_app {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_pass http://app;
}
}
}
如果其他人遇到这个问题,请写下我自己的答案
用于创建Ec2实例的安全组需要打开传入端口443。如果docker compose文件未公开端口443,它将不会自动将端口添加为安全组上的open。您可以在aws控制台的“网络与安全”下为Ec2手动打开端口。如果是弹性负载平衡器,您应该在其上安装SSL证书。是的,负载平衡器安装了亚马逊发布的SSL证书,并在443端口侦听器上使用。您看到了什么确切错误?。你看到哪里的交通堵塞了吗?。在ALB侧或Nginx级?。你可以让ALB在443上监听,在80上执行SSL终止和后端Nginx。哇,愚蠢的错误!docker机器使用的我的安全组不自动允许端口443,因为docker compose中未指定该端口。添加了规则,现在一切正常!哦。高兴的解决了<默认情况下,代码>gunicorn侦听端口800。那么,如何设置gunicon在ssl上侦听呢?将gunicorn直接暴露在internet上不是一个好主意。在它前面使用一个反向代理,比如nginx或traefik。我知道,不过我现在让apache监听端口443,并在端口8000上代理gunicorn。但我似乎无法通过弹性豆茎让它工作