docker反向代理中的nginx+vault

Jir*_*vra 5 reverse-proxy nginx docker hashicorp-vault

我需要将 nginx 配置为 docker 中运行的某些应用程序的反向代理。Portainer 运行良好,但 HashiCorp Vault 仍然存在问题。进一步的步骤将使用 nginx 为所有正在运行的应用程序进行 SSL 连接。所有应用程序都是最简单的设置,我可以在没有任何特殊功能的情况下使用。

环境

  • 森托斯7
  • rpm 1.16.1-1 的 nginx(对于调试选项,在进一步使用时它也应该在容器中)
  • 肖像画家
  • 避难所 1.2.4
/etc/nginx/nginx.conf
        用户 nginx;
    工作进程 1;

    error_log /var/log/nginx/error.log 调试;
    pid /var/run/nginx.pid;


    事件{
      工人连接1024;
    }


    http{
      包括/etc/nginx/mime.types;
      default_type 应用程序/八位字节流;

      log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent“$http_referer”'
                        '“$http_user_agent”“$http_x_forwarded_for”';

      access_log /var/log/nginx/access.log main;

      发送文件;
      #tcp_nopush 上;

      keepalive_timeout 65;

      #gzip 开启;

      服务器 {
        听80;
        服务器名称 1.2.3.4;

        位置/porttainer/ {
          proxy_pass http://1.2.3.4:9000/;
          重写 ^/portainer(/.*) $1 中断;
          proxy_redirect 关闭;
          proxy_set_header 主机 $host;
          proxy_set_header X-真实IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Host $server_name;
        }

        位置/金库/ {
          proxy_pass http://1.2.3.4:8200/;
          重写 ^/vault(/.*) $1 中断;
          proxy_redirect 关闭;
          proxy_set_header 主机 $host;
          proxy_set_header X-真实IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Forwarded-Host $server_name;
        }
      }

      #include /etc/nginx/conf.d/*.conf;
    }

/var/lib/docker/volumes/vault_vault_config/_data/vault.json

    {
      “后端”:{
        “文件”: {
          “路径”:“/库/文件”
        }
      },
      “听众”:{
        “TCP”:{
          “地址”:“0.0.0.0:8200”,
          “tls_disable”:1
        }
      },
      “ui”:正确,
      “disable_mlock”:真,
      “disable_clustering”:true
    }

注意:在 docker 中运行需要“disable_mlock”,“disable_clustering”应该可以解决我的问题,但它没有按预期工作。

/var/lib/docker/apps/vault-stack.yml

    版本:'3.2'

    服务:
      保险库:
        图片:金库
        部署:
          副本:1
        端口:
          - 8200:8200
        环境:
          - VAULT_ADDR=http://127.0.0.1:8200
        卷:
          -vault_config:/vault/config
          -vault_logs:/vault/logs
          - 保管库文件:/保管库/文件
        入口点:vault 服务器-config=/vault/config/vault.json

    卷:
      保险库配置:
        司机:本地
      保险库文件:
        司机:本地
      保险库日志:
        司机:本地

问题

Portainer 运行良好,但使用 Vault 时我仍然遇到 404 错误的问题。当我访问http://1.2.3.4/vault时,我被重定向到http://1.2.3.4/ui,这显然不存在。据我发现,这是因为“307 临时重定向”,这是 /var/log/nginx/error.log 的一些输出

    2019/11/12 14:06:41 [调试] 13564#13564: *8 使用配置“/vault/”
    2019/11/12 14:06:41 [调试] 13564#13564: *8 HTTP/1.1 301 永久移动
    位置:http://1.2.3.4/vault/
    2019/11/12 14:06:41 [通知] 13564#13564: *8 "^/vault(/.*)" 匹配 "/vault/",客户端:10.20.30.40,服务器:1.2.3.4,请求: “GET /vault/ HTTP/1.1”,主机:“1.2.3.4”
    2019/11/12 14:06:41 [通知] 13564#13564: *8 重写数据: "/", args: "", 客户端: 10.20.30.40, 服务器: 1.2.3.4, 请求: "GET /vault/ HTTP/1.1”,主机:“1.2.3.4”
    2019/11/12 14:06:41 [调试] 13564#13564: *8 HTTP/1.1 307 临时重定向
    位置:/ui/
    2019/11/12 14:06:41 [错误] 13564#13564: *8 找不到“/etc/nginx/html/ui/index.html”(2:没有这样的文件或目录),客户端:10.20。 30.40,服务器:1.2.3.4,请求:“GET /ui/ HTTP/1.1”,主机:“1.2.3.4”

我尝试过的

几乎所有的事情:)已经花了太多的时间来完成这项工作,这就是我来这里的原因。当我尝试捕获重定向并将其放在那里时,我遇到了许多不同的错误,从 500 Internal 到“太多重定向”。尝试通过禁用集群来解决vault中“服务器”端的问题(如vault.json中所示)

laz*_*lev 4

我试图实现同样的目标。这是我让它工作的唯一方法......

location /vault/ {
    proxy_pass  http://vault:8200/;

    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 Accept-Encoding ""; # needed for sub_filter to work with gzip enabled (/sf/answers/2539198161/)

    proxy_redirect /ui/ /vault/ui/;

    sub_filter '<head>' '<head><base href="/vault/">';
    sub_filter '"/ui/' '"ui/';
    sub_filter_once off;
}
location /v1 {
    proxy_pass http://vault:8200;
}
Run Code Online (Sandbox Code Playgroud)

解决方案主要取自https://github.com/Folcky/hashicorp-vault-and-nginx/blob/master/vault.location

恕我直言,一个更干净的解决方案是使用子域,以便vault.mycompany.com能够独占使用根上下文。