docker反向代理中的nginx + vault
Posted
技术标签:
【中文标题】docker反向代理中的nginx + vault【英文标题】:nginx + vault in docker reverse proxy 【发布时间】:2020-03-08 06:39:25 【问题描述】:我需要将 nginx 配置为在 docker 中运行的某些应用程序的反向代理。 Portainer 运行良好,但 HashiCorp Vault 仍然存在问题。进一步的步骤将使用 nginx 为所有正在运行的应用程序进行 SSL 连接。所有应用程序都处于我可以使用的最简单的设置中,无需任何特殊功能。
环境
Centos 7 nginx 来自 rpm 1.16.1-1(用于调试选项,在进一步使用时它也应该在容器中) 搬运工 保险库 1.2.4 /etc/nginx/nginx.conf 用户 nginx; worker_processes 1; error_log /var/log/nginx/error.log 调试; pid /var/run/nginx.pid; 事件 worker_connections 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; 位置/搬运工/ proxy_pass http://1.2.3.4:9000/; 重写 ^/portainer(/.*) $1 break; 代理重定向关闭; proxy_set_header 主机 $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; 位置/保险库/ proxy_pass http://1.2.3.4:8200/; 重写 ^/vault(/.*) $1 break; 代理重定向关闭; proxy_set_header 主机 $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;/var/lib/docker/volumes/vault_vault_config/_data/vault.json
“后端”: “文件”: “路径”:“/保险库/文件” , “听众”: “tcp”: “地址”:“0.0.0.0:8200”, “tls_disable”:1 , “ui”:是的, “disable_mlock”:是的, “disable_clustering”:真注意:在 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 卷: - 保险库配置:/保险库/配置 - 保险库日志:/保险库/日志 - 保险库文件:/保险库/文件 入口点:保管库服务器 -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 [error] 13564#13564: *8 "/etc/nginx/html/ui/index.html" is not found (2: No such file or directory), client: 10.20. 30.40,服务器:1.2.3.4,请求:“GET /ui/ HTTP/1.1”,主机:“1.2.3.4”我尝试过的
几乎所有东西 :) 已经花费了太多时间来完成这项工作,这就是我在这里的原因。 当我试图捕捉重定向并将我自己的重定向放在那里时,我遇到了许多不同的错误,从 500 Internal 到“重定向太多”。 试图通过禁用集群(如在 vault.json 中)在 Vault 中的“服务器”端解决它
【问题讨论】:
你看到这篇文章了吗? keyboardinterrupt.org/… 【参考方案1】:我试图达到同样的目的。这是我让它工作的唯一方法......
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://***.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;
解决方案大多取自https://github.com/Folcky/hashicorp-vault-and-nginx/blob/master/vault.location
恕我直言,更简洁的解决方案是使用 vault.mycompany.com
之类的子域,以便能够独占使用根上下文。
【讨论】:
以上是关于docker反向代理中的nginx + vault的主要内容,如果未能解决你的问题,请参考以下文章
docker中的Nginx,fastapi和streamlit - 反向代理不适用于streamlit