【问题标题】:How to add a reverse proxy to a docker image如何向 docker 镜像添加反向代理
【发布时间】:2021-11-24 11:06:21
【问题描述】:

我有一个运行元数据库网站实例的 docker 映像,我访问它的方式如下:<my-ip>:3000,此映像是通过以下方式启动的:

docker run -d -p 3000:3000 \
-v /root/metabase_data:/metabase_data \
-e "MB_DB_FILE=/metabase_data/metabase.db" \
--name metabase metabase/metabase

此访问不安全,我想通过 https 使用它,我尝试使用 nginx 添加反向代理,但我找不到将此端口(或任何其他端口)转换为 https 的方法。

有更好的方法吗?

【问题讨论】:

    标签: docker nginx reverse-proxy


    【解决方案1】:

    你可以用 nginx 做到这一点

    1. 将您的命令包装到docker-compose:
    version: '3.7'
    
    services:
      nginx:
        image: nginx:latest
        container_name: nginx
        volumes:
          - ./nginx:/etc/nginx:ro
        ports:
          - 80:80
          - 443:443
          - 3000:3000
        restart: always
    
      metabase:
        image: metabase/matabase:latest
        container_name: metabase
        environment:
          - MB_DB_FILE=/metabase_data/metabase.db
        volumes:
          - /root/metabase_data:/metabase_data
        restart: always
    
    
    1. 为 nginx 创建 SSL 证书

    2. 为 nginx 写 conf

    worker_processes 1;
      
    events { worker_connections 1024; }
    
    http {
    
        sendfile on;
    
        upstream metabase {
            server metabase:3000;
        }
    
     
        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;
    
        server {
            listen 3000 ssl;
            ssl_certificate     /etc/nginx/ssl/ca.crt;
            ssl_certificate_key /etc/nginx/ssl/ca.key;
     
            location / {
                proxy_pass         http://metabase;
                proxy_redirect     off;
            }
        }
    }
    
    1. 执行docker-compose up -d

    【讨论】:

    • 我这样做了,最后docker container ls 显示90913cc8ce99 nginx:latest "/docker-entrypoint.…" 54 minutes ago Up 54 minutes 0.0.0.0:81->81/tcp, 0.0.0.0:444->444/tcp, 80/tcp, 0.0.0.0:3000->3000/tcp nginx,我无法再访问该页面
    • 检查容器日志,你的页面现在应该是https://ip_addr:3000
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2020-09-03
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多