Minio是我们项目中经常用到的文件存储系统,今天项目升级,原本用cos的,现在改为minio,结果报错no path allowed in endpoint。瞬间我们都不知道怎么回事了,测试环境也大了一个minio的系统,用的很正常,怎么生产环境就出问题了呢?今天一起解决一下minio的问题no path allowed in endpoint,希望能解决。
报错信息如下:
java.lang.IllegalArgumentException: no path allowed in endpoint https://*****:30080/minio/,看到这个报错, 于是开始在网上找答案,有说要把解决方法:把url的前缀http://去掉即可, 但实际上, 没什么用, 因为你不写http, 默认会加上, 很明显, 我们用的https, 用http根本行不通。
回到代码中,是175行报错,代码如下
/**
* 初始化客户端
* @param minioUrl
* @param minioName
* @param minioPass
* @return
*/
private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) {
if (minioClient == null) {
try {
minioClient = MinioClient.builder()
.endpoint(minioUrl)
.credentials(minioName, minioPass)
.build();
} catch (Exception e) {
e.printStackTrace();
}
}
return minioClient;
}
看代码, 是在 .endpoint(minioUrl) 这一行报的错,但是为什么呢?继续找答案。
这篇文章给了我启发:https://cloud.tencent.com/developer/article/1410224,
当我们再minio中配置nginx代理的时候,可能要踏坑。Minio官方文档有配置nginx代理的说明,但是如果应用到业务当中还是会踩一下坑,在实际应用中,我希望通过配置应用名称的方法达到Java 应用可以连接、分享连接可以下载文件、URL可以直接登录的目的,然后加入如下配置:
location /files {
proxy_buffering off; //重要!
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
# 或者
location /minio {
proxy_buffering off; //重要!
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000/minio;
}
但是这两种配置均不能达到我所希望的效果,第一种直接重定向失败、第二种可以实现网页登录,但是无法实现Java程序连接,连接时报错:
io.minio.errors.InvalidEndpointException: no path allowed in endpoint
果然,大家报的错是一样的,猜测Minio的endpoint仅支持到root,也就是/目录下,所以在nginx配置中新加了一个server,也就是Minio官方文档上给出的配置。
server {
listen 80; #或者443
server_name file.example.com;
location / {
proxy_buffering off;
proxy_set_header Host $http_host;
proxy_pass http://localhost:9000;
}
}
这样配置对强迫症不太友好,但是为了实现业务职能把Minio的代理单独一个server,配置唯一的二级域名来代理。这个解决no path allowed in endpoint的方法,应该是可以的,我们也还在尝试。
另一种方式,这是从代码中看到的。首先报错的原因在哪里呢,打开代码,看到这样一行。
private void validateUrl(HttpUrl url) {
if (!url.encodedPath().equals("/")) {
throw new IllegalArgumentException("no path allowed in endpoint " + url);
}
}
这是构建minio的时候,一个校验url的时候,如果url不是以斜杠结尾,会报这个错。
Minio是我们项目中经常用到的文件存储系统,今天项目升级,原本用cos的,现在改为minio,结果报错no path allowed in endpoint。瞬间我们都不知道怎么回事了,测试环境也大了一个minio的系统,用的很正常,怎么生产环境就出问题了呢?今天一起解决一下minio的问题no path allowed in endpoint,希望能解决。
Centos7系统下的安装RabbitMQ3.10,添加rabbitmq yum源,yum安装rabbitmq,启动rabbitmq
今天又有一个项目上线,总结下来已经是腾讯云的第5个项目, 某光K8s项目v8.3.9版本, 弃用k8s的Ingress. 因为腾讯云的clb按小时收费,而且费用相对而言比较高,