我在Kubernets中使用minio,效果很好。但是,我似乎无法更改预签名URL的域和协议。 Minio不断给我http://minio.test.svc:9000/delivery/
,直到我想要的地方https://example.com/delivery
。我曾尝试在豆荚中设置MINIO_DOMIN
,但似乎没有效果;我想我还是在滥用这个变量。
答案 0 :(得分:1)
我花了几天时间解决这个问题,并设法在Kubernetes集群中使用NGINX解决了这个问题。
NGINX controller Kubernetes: need to change Host header within ingress
您可以使用入口注释将所有传入流量的Host标头更改为您的Minio入口,以便它始终是相同的主机名。
答案 1 :(得分:0)
这完全取决于您如何创建Minio客户端实例。如下指定主机和端口将使Minio将您的域解析为IP地址,并使用IP而非域。示例JavaScript代码:
import { Client as MinioClient } from 'minio';
const client = new MinioClient(
endPoint: 'yourdomain.com',
port: 9000,
accessKey: process.env.MINIO_ACCESS_KEY,
secretKey: process.env.MINIO_SECRET_KEY,
useSSL: false
);
如果您像上面那样创建minio实例,则您的域将被解析为其相应的IP地址,因此minio将与http://x.x.x.x:9000
而非https://yourdomain.com
一起使用
还要注意,如果您的客户端配置如上,则尝试使用useSSL: true
将引发如下SSL错误
write EPROTO 140331355002752:error:1408F10B:SSL routines:ssl3_get_record:wrong
version number:../deps/openssl/openssl/ssl/record/ssl3_record.c:332
要让minio使用您的域作为https://yourdomain.com
,您需要拥有nginx
之类的Web服务器,以便将请求代理到您的minio服务器。 Minio已记录了如何实现此here。按照here中所述,将SSL添加到您的域中,然后继续创建您的minio客户端,如下所示:
import { Client as MinioClient } from 'minio';
const client = new MinioClient(
endPoint: 'yourdomain.com',
port: 443,
accessKey: process.env.MINIO_ACCESS_KEY,
secretKey: process.env.MINIO_SECRET_KEY,
useSSL: true
);
请注意port
和useSSL
参数的变化。
Minio现在将在所有情况下使用https://yourdomain.com
。签名的网址也将是https
。