亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

nginx代理minio的實現(xiàn)示例

 更新時間:2025年05月21日 10:48:54   作者:老範(fàn)吖  
本文介紹通過Nginx代理MinIO實現(xiàn)預(yù)簽名URL的配置方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、nginx的配置(代理MinIO并支持預(yù)簽名URL)

這里是我的項目的整個配置文件

server {
    # 監(jiān)聽的端口
    listen 15743;
    # 監(jiān)聽地址
    server_name 172.16.49.10;
    #allow 127.0.0.1;

    # 設(shè)定本虛擬主機(jī)的訪問與錯誤日志
    access_log /home/project/nginx/nginx-access.log;
    error_log /home/project/nginx/nginx-error.log;

    # 設(shè)置整個 server 的最大請求體大小為 10MB
    client_max_body_size 100M;

  location / {
        proxy_pass http://172.16.49.10:8888; # 代理到Java應(yīng)用的地址和端口
        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-Proto $scheme;
    }

	# 文件上傳代理路徑
	location /minio-upload/ {
		rewrite ^/minio-upload/(.*)$ /$1 break;  # 關(guān)鍵路徑重寫
		
		proxy_pass http://172.16.49.10:9000;
		
		# 必須透傳的請求頭
		proxy_set_header Host 172.16.49.10:9000;  # 必須與MinIO服務(wù)地址完全一致
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-Proto $scheme;
		proxy_set_header Authorization $http_authorization;  # 傳遞簽名頭
		
		# 支持大文件上傳
		client_max_body_size 0;
		
		# 優(yōu)化代理連接
		proxy_http_version 1.1;
		proxy_connect_timeout 300;
		proxy_read_timeout 300;
		proxy_send_timeout 300;
		chunked_transfer_encoding off;
	}
}

二、Java生成預(yù)簽名URL(Spring Boot示例)

1. 添加依賴(pom.xml)

<!-- Minio 文件存儲 -->
<dependency>
	<groupId>io.minio</groupId>
	<artifactId>minio</artifactId>
	<version>8.2.1</version>
</dependency>

2.配置類

配置信息(application.yml)

minio:
  url: http://172.16.49.10:9000
  accessKey: minioadmin
  secretKey: minioadmin
import io.minio.MinioClient;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Minio 配置信息
 */
@Slf4j
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig
{
    /**
     * 服務(wù)地址
     */
    private String url;

    /**
     * 用戶名
     */
    private String accessKey;

    /**
     * 密碼
     */
    private String secretKey;

    @Bean
    public MinioClient getMinioClient()
    {
        log.info("連接MinioClient");
        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
    }
}

3. 生成預(yù)簽名URL的服務(wù)類

import io.minio.GetPresignedObjectUrlArgs;
import io.minio.MinioClient;
import io.minio.http.Method;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;

@Service
public class MinioService
{
    @Resource
    private MinioClient minioClient;

    @Resource
    private MinioTemplate minioTemplate;

    /**
     * 生成PUT方法預(yù)簽名URL(有效期1小時)
     *
     * @param bucket 存儲桶名稱
     * @param object 對象路徑(如:uploads/device1/20240326.zip)
     */
    public String generateUploadUrl(String bucket, String object)
    {
        try
        {
            minioTemplate.existBucket(bucket);
            String string = minioClient.getPresignedObjectUrl(
                    GetPresignedObjectUrlArgs.builder()
                            .method(Method.PUT)
                            .bucket(bucket)
                            .object(object)
                            .expiry(1, TimeUnit.HOURS)
                            .build()
            );

            // 替換為Nginx代理地址
            return string.replace("http://172.16.49.10:9000", "http://172.16.49.10:15743/minio-upload");
        } catch (Exception e)
        {
            throw new RuntimeException("生成預(yù)簽名URL失敗", e);
        }
    }
}

4. minio工具類

我只需要判斷桶存在。其他方法可以從網(wǎng)上找替換掉這個工具類

import io.minio.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;


@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class MinioTemplate
{

    @Resource
    private MinioClient minioClient;


    /**
     * 判斷桶是否存在,如果存在返回true,如果不存在返回false
     *
     * @param bucketName
     * @return
     */
    @SneakyThrows
    public Boolean existBucket(String bucketName)
    {
        boolean exist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        if (!exist)
        {
            makeBucket(bucketName);
        }
        return true;

    }

    /**
     * 創(chuàng)建桶
     *
     * @param bucketName
     * @return
     */
    @SneakyThrows
    public void makeBucket(String bucketName)
    {
        minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
    }
}

5. 調(diào)用示例(Controller)

@RestController
@RequestMapping("/api")
public class FileController {
    
    @Autowired
    private MinioService minioService;
?
    @GetMapping("/presigned-url")
    public ResponseEntity<String> getPresignedUrl(@RequestParam String bucket, @RequestParam String objectPath) {
        String url = minioService.generateUploadUrl(bucket, objectPath);
        return ResponseEntity.ok(url);
    }
}

我的后端端口使用nginx代理15743,獲取預(yù)簽名URL:

GET
http://172.16.49.10:15743/api/presigned-url?bucket=12312&objectPath=121211.txt

在這里插入圖片描述

上傳文件:根據(jù)返回的URL,直接調(diào)用

PUT
http://172.16.49.10:15743/minio-upload/12312/121211.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20250326%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250326T064808Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2633bb91c9bc9094fd10570e023ca990395b85f912a8cbd3d31a36904124265a

在這里插入圖片描述

到此這篇關(guān)于nginx代理minio的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)nginx代理minio內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評論