nginx+;docker反向代理中的vault

nginx+;docker反向代理中的vault,docker,nginx,reverse-proxy,hashicorp-vault,Docker,Nginx,Reverse Proxy,Hashicorp Vault,我需要将nginx配置为docker中运行的某些应用程序的反向代理。Portainer运行良好,但HashiCorp Vault仍然存在问题。进一步的步骤将是对所有正在运行的应用程序使用nginx进行SSL连接。所有的应用程序都是我可以使用的最简单的设置,没有任何特殊功能 环境 Centos 7 来自rpm 1.16.1-1的nginx(对于调试选项,在进一步使用时,它也应该在容器中) 便携式 保险库1.2.4 /etc/nginx/nginx.conf user nginx; w

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

环境
  • Centos 7
  • 来自rpm 1.16.1-1的nginx(对于调试选项,在进一步使用时,它也应该在容器中)
  • 便携式
  • 保险库1.2.4
/etc/nginx/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log debug; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; 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; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; server { listen 80; server_name 1.2.3.4; location /portainer/ { proxy_pass http://1.2.3.4:9000/; rewrite ^/portainer(/.*) $1 break; proxy_redirect off; 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; } location /vault/ { proxy_pass http://1.2.3.4:8200/; rewrite ^/vault(/.*) $1 break; proxy_redirect off; 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; } } #include /etc/nginx/conf.d/*.conf; } 用户nginx; 工人1; error\u log/var/log/nginx/error.log调试; pid/var/run/nginx.pid; 事件{ 工人(1024);; } http{ 包括/etc/nginx/mime.types; 默认_类型应用程序/八位字节流; 日志格式主“$remote\u addr-$remote\u user[$time\u local]“$request”” “$status$body\u bytes\u sent”$http\u referer” “$http_user_agent”“$http_x_forwarded_for””; access\u log/var/log/nginx/access.log main; 发送文件到; #tcp_nopush on; 保持生命超时65; #gzip on; 服务器{ 听80; 服务器名称1.2.3.4; 地点/搬运工/{ 代理通行证http://1.2.3.4:9000/; 重写^/portainer(/.*)$1中断; 代理_重定向关闭; 代理设置头主机$Host; 代理集头X-Real-IP$remote\u addr; proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For; 代理\u集\u头X转发主机$server\u名称; } 位置/保险库/{ 代理通行证http://1.2.3.4:8200/; 重写^/vault(/.*)1个断点; 代理_重定向关闭; 代理设置头主机$Host; 代理集头X-Real-IP$remote\u addr; proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For; 代理\u集\u头X转发主机$server\u名称; } } #包括/etc/nginx/conf.d/*.conf; } /var/lib/docker/volumes/vault\u vault\u config/\u data/vault.json

{ "backend": { "file": { "path": "/vault/file" } }, "listener": { "tcp":{ "address": "0.0.0.0:8200", "tls_disable": 1 } }, "ui": true, "disable_mlock": true, "disable_clustering": true } { “后端”:{ “文件”:{ “路径”:“/vault/文件” } }, “听众”:{ “tcp”:{ “地址”:“0.0.0.0:8200”, “tls_禁用”:1 } }, “ui”:对, “禁用锁定”:真, “禁用_集群”:true } 注意:“disable_mlock”需要在docker中运行,“disable_clustering”应该可以解决我的问题,但它没有按预期工作

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

version: '3.2' services: vault: image: vault deploy: replicas: 1 ports: - 8200:8200 environment: - VAULT_ADDR=http://127.0.0.1:8200 volumes: - vault_config:/vault/config - vault_logs:/vault/logs - vault_file:/vault/file entrypoint: vault server -config=/vault/config/vault.json volumes: vault_config: driver: local vault_file: driver: local vault_logs: driver: local 版本:“3.2” 服务: 拱顶: 图片:保险库 部署: 副本:1份 端口: - 8200:8200 环境: -保险库地址=http://127.0.0.1:8200 卷数: -vault\u配置:/vault/config -vault\u日志:/vault/日志 -vault\u文件:/vault/文件 入口点:vault服务器-config=/vault/config/vault.json 卷数: 保险库配置: 司机:本地 vault\u文件: 司机:本地 vault_日志: 司机:本地 问题 Portainer运行良好,但对于vault,我仍然存在一个问题,即出现404错误。当我去的时候,我得到了明显不存在的重定向。正如我发现的,这是因为“307临时重定向”,这里有一些来自/var/log/nginx/error.log的输出

2019/11/12 14:06:41 [debug] 13564#13564: *8 using configuration "/vault/" 2019/11/12 14:06:41 [debug] 13564#13564: *8 HTTP/1.1 301 Moved Permanently Location: http://1.2.3.4/vault/ 2019/11/12 14:06:41 [notice] 13564#13564: *8 "^/vault(/.*)" matches "/vault/", client: 10.20.30.40, server: 1.2.3.4, request: "GET /vault/ HTTP/1.1", host: "1.2.3.4" 2019/11/12 14:06:41 [notice] 13564#13564: *8 rewritten data: "/", args: "", client: 10.20.30.40, server: 1.2.3.4, request: "GET /vault/ HTTP/1.1", host: "1.2.3.4" 2019/11/12 14:06:41 [debug] 13564#13564: *8 HTTP/1.1 307 Temporary Redirect Location: /ui/ 2019/11/12 14:06:41 [error] 13564#13564: *8 "/etc/nginx/html/ui/index.html" is not found (2: No such file or directory), client: 10.20.30.40, server: 1.2.3.4, request: "GET /ui/ HTTP/1.1", host: "1.2.3.4" 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 3564:*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 3564:*8重写数据:“/”,参数:”,客户端: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 3564:*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个内部到“太多重定向”,当我试图捕获重定向并将其放在我自己的位置时。
试图通过禁用集群(如在vault.json中)在vault的“服务器”端解决此问题。

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

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 (https://stackoverflow.com/a/36274259/3375325)

    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;
}
位置/保险库/{
代理通行证http://vault:8200/;
代理设置头主机$Host;
代理集头X-Real-IP$remote\u addr;
proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For;
sub_筛选器需要代理集头接受编码“”;#才能在启用gzip的情况下工作(https://stackoverflow.com/a/36274259/3375325)
代理重定向/ui//vault/ui/;
子过滤器“”;
子过滤器''/ui/''ui/';
子过滤器关闭一次;
}
位置/v1{
代理通行证http://vault:8200;
}
解决方案主要来自

一个更干净的解决方案是使用一个子域,如
vault.mycompany.com
,以便能够专门使用根上下文。

您看到这篇文章了吗?