Docker nginx将HTTP重定向到HTTPS

时间:2016-10-16 02:26:17

标签: node.js nginx docker

我正在使用Docker设置服务器。一个容器运行配置了SSL的nginx映像。第二个容器使用简单的节点应用程序运行(在端口3001上)。我有两个容器与--link docker参数进行通信。

我需要将所有HTTP请求重定向到HTTPS。查看其他主题和在线资源,我找到了return 301 https://$host$request_uri。当我在浏览器中输入http://localhost时,我在浏览器中获取了上游的名称(https://node_app而不是https://localhost)。如何在不定义server_name或明确定义域的情况下成功重定向?

修改:我应该澄清一下,直接在浏览器中访问https://localhost是有效的。 HTTP没有。

这是我的nginx.conf文件:

worker_processes 1;

events { worker_connections 1024; }

http {

  upstream node_app {
    server node:3001;
  }

  server {
    listen 80;
    return 301 https://$host$request_uri;
  }

  server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    location / {
      proxy_pass http://node_app/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection 'upgrade';
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
    }

  }

}

1 个答案:

答案 0 :(得分:1)

看起来一切都还好。尝试了一些卷曲调用,以确保正确设置标题(@RichardSmith的推荐信用于推荐)。还在不同的浏览器中测试过一切正常!事实证明我需要清除主浏览器的缓存。不知道为什么,但它解决了这个问题!

对于有兴趣控制nginx完成的301重定向缓存的任何人:https://serverfault.com/questions/394040/cache-control-for-permanent-301-redirects-nginx