node.js - Docker nginx 将 HTTP 重定向到 HTTPS

标签 node.js nginx docker

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

我需要将所有 HTTP 请求重定向到 HTTPS。查看其他线程和在线资源,我发现返回 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;
    }

  }

}

最佳答案

看起来一切都很好。尝试了一些curl调用以确保 header 设置正确(感谢@RichardSmith的推荐)。还在不同浏览器中进行了测试。一切顺利!事实证明我需要清除我的主浏览器的缓存。不知道为什么,但它解决了问题!

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

关于node.js - Docker nginx 将 HTTP 重定向到 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066217/

相关文章:

node.js - 无法在 react native 教程中启动 npm

c++ - Windows 上的另一个 node-gyp 错误或实际编码错误?

docker - Traefik LetsEncrypt错误 “too many registrations for this IP”

python - 无法让我的 python 应用程序在 docker 容器中启动

javascript - 合并两个异步请求的数据以应答这两个请求

javascript - 如何在Joi中添加自定义验证器功能?

php - 如何让Nginx使用替代的PHP版本?

ruby-on-rails - 使用 Rails 和 Nginx 获取客户端的真实 IP 地址?

nginx - 警告 : erroneous pipeline: no element "rtmpsink"

docker - 从同样位于 boot2docker vm 中的 Docker 容器以 localhost 的身份访问主机