nginx配置反向代理+ docker + http到https重定向

时间:2019-07-08 21:31:21

标签: docker nginx

上下文

我在其他几个容器前面有一个nginx容器。其中之一运行在10001:3000上显示的node.js前端

我设法拼凑了部分有效的nginx配置,允许443上的SSL终止到10001上的容器。

但是,我现在需要将所有流量重定向到HTTPS,理想情况下,阻止端口10001正常工作,某种HTTP可以全部捕获?

这是我的本地配置。

user  www-data;

error_log  /var/log/nginx/error.log warn;
pid        /run/nginx.pid;

worker_processes  2;


events {
    worker_connections  1024;
    multi_accept off;
}

stream {
    upstream stream_backend {
         server 172.17.0.1:10001;
        # server backend2.example.com:12345;
         #server backend3.example.com:12345;
    }

    server {
        listen                443 ssl;
        proxy_pass            stream_backend;

        ssl_certificate /etc/letsencrypt/live/localhost/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/localhost/fullchain.pem;
        ssl_protocols         SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers           HIGH:!aNULL:!MD5;
        ssl_session_cache     shared:SSL:20m;
        ssl_session_timeout   4h;
        ssl_handshake_timeout 30s;


        #...
    }
}

除此之外,我尝试的所有操作都遇到语法错误或其他错误。谁能提供一些简单的建议?

1 个答案:

答案 0 :(得分:1)

如果使用docker-compose并将API和nginx添加到同一网桥网络,则可以将端口公开给api容器,并删除ports指令。这将允许nginx与api容器进行通信,但是将没有公开可用的api开放端口。

ports:
  - "8000:80"
expose:
  - "8000"

上面,ports指令向公众开放端口8000。 Expose使8000仅在本地子网或网桥网络上可用。因此,在这种情况下,我的建议是删除端口部分。 Expose也可以与run命令一起使用,但是在这种情况下,您将需要手动创建网桥网络。

我最近有同样的问题。实际上,我有几个问题,但这是其中之一。在这里查看我的问题和答案以获取更多详细信息。

NGINX reverse proxy not working for .NET core webAPI running in Docker