Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS负载平衡器&x2B;Nginx+;gunicorn-如何使用ssl_Amazon Web Services_Nginx - Fatal编程技术网

Amazon web services AWS负载平衡器&x2B;Nginx+;gunicorn-如何使用ssl

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吗?目标 负载平衡器: +

我正在尝试使用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。但我似乎无法通过弹性豆茎让它工作