- docker/
- nginx+;docker反向代理中的vault
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
,以便能够专门使用根上下文。您看到这篇文章了吗?