Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js Docker nginx将HTTP重定向到HTTPS_Node.js_Nginx_Docker - Fatal编程技术网

Node.js Docker nginx将HTTP重定向到HTTPS

Node.js Docker nginx将HTTP重定向到HTTPS,node.js,nginx,docker,Node.js,Nginx,Docker,我正在用Docker设置服务器。一个容器运行配置了SSL的nginx映像。第二个容器运行一个简单的节点应用程序(在端口3001上)。这两个容器通过一个--link docker参数进行通信 我需要将所有HTTP请求重定向到HTTPS。查看其他线程和在线源代码,我发现return301 https://$host$request\u uri。当我在浏览器中键入时,我会在浏览器中获得上游的名称(而不是)。如何在不定义服务器名称或显式定义域的情况下成功重定向 编辑:我应该澄清,直接在浏览器中访问是可行

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

我需要将所有HTTP请求重定向到HTTPS。查看其他线程和在线源代码,我发现
return301 https://$host$request\u uri
。当我在浏览器中键入时,我会在浏览器中获得上游的名称(而不是)。如何在不定义服务器名称或显式定义域的情况下成功重定向

编辑:我应该澄清,直接在浏览器中访问是可行的。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;
    }

  }

}

看起来一切都很好。尝试了一些curl调用,以确保标题设置正确(推荐@RichardSmith)。也在不同的浏览器中测试。一切都成功了!我需要清除主浏览器的缓存。不知道为什么,但它解决了问题


对于任何有兴趣控制nginx执行的301重定向缓存的人:

方法与运行nginx的裸机linux box相同。只需在谷歌上搜索一分钟或更短的时间。在docker中公开两个侦听端口目前似乎不是您的问题(HTTPS将以与HTTP相同的方式公开,以防万一)
nginx
配置看起来不错。节点应用程序是否正在更改域名?使用浏览器插件或curl分析HTTP响应中的
位置
头,以确定重定向的确切顺序。@RichardSmith运行
curlhttp://localhost --head
并得到以下响应。看起来位置是正确的<代码>HTTP/1.1 301永久移动服务器:nginx/1.11.5日期:Sun,2016年10月16日13:58:39 GMT内容类型:文本/html内容长度:185连接:保持活动位置:https://localhost/如果将
代理通行证更改为
代理通行证,会发生什么情况http://node_app;?这太奇怪了!我只在Google Chrome上看到这种行为。Safari和Firefox能够成功重定向
http://localhost
https://localhost
。有什么想法吗?