使用docker进行Nginx反向代理SSL终止 - 重定向过多

时间:2018-03-13 07:33:58

标签: docker nginx

我试图通过docker部署Laravel(php)应用程序,这有点不合时宜。一切都很好,直到我尝试通过Lets Encrypt使用SSL证书,这会触发我无法解决的重定向循环。

upstream app {
    server app1520925178:80;
}

server {
    listen 80 default_server;
    server_name app.example.com;

    # handle future LE refreshes
    location /.well-known {
        root /var/www/html;
        try_files $uri $uri/ =404;
    }

    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl default_server;

    server_name app.example.com;

    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers                ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
    ssl_prefer_server_ciphers  on;
    ssl_session_cache          shared:SSL:10m;
    ssl_session_timeout        24h;
    keepalive_timeout          300s;

    ssl on;
    ssl_certificate      /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/app.example.com/privkey.pem;

    charset utf-8;

    location / {
        #include proxy_params;
        proxy_pass http://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;

        # Handle Web Socket connections
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

非常感谢任何指导。

编辑:在此帖子创建后几分钟“随机”开始工作。仍然没有100%确定为什么需要时间来“宣传”,如果有人对此有所了解,我会很感激。

2 个答案:

答案 0 :(得分:1)

如果您将Cloudflare用作DNS服务(未在其上注册域,而是通过其管理DNS记录)并启用了Cloudflare的保护(橙色云符号),则可能会发生这种情况。

请注意this support article by Cloudflare中的以下段落:

  

如果原始服务器恰好配置为将HTTP请求重定向到HTTPS,则将服务器响应返回到Cloudflare进行加密,并且由于Cloudflare期望HTTP流量,因此它将继续重新发送相同的请求,从而导致重定向循环。这会导致浏览器显示“页面无法正确重定向”或“ ERR_TOO_MANY_REDIRECTS”错误。

因此,灵活的SSL最有可能是您遇到的问题。您可以通过转到Cloudflare控制面板中的加密页面并将SSL模式设置为“完全(严格)”来关闭此功能: Set Cloudflare SSL mode to full

这解决了我在Apache系统上的问题,但是我非常确信这与nginx的问题相同。

答案 1 :(得分:-1)

将加密设置更改为“完全(严格)”可能会有所帮助:

screenshot