為MinIO Server設置Nginx代理


官方文檔地址:http://docs.minio.org.cn/docs/master/setup-nginx-proxy-with-minio

nginx參考網址:https://www.nginx.com/blog/enterprise-grade-cloud-storage-nginx-plus-minio/

標准的Root配置

server {
 listen 80;
 server_name example.com;
 location / {
   proxy_set_header Host $http_host;
   proxy_pass http://localhost:9000;
 }
}

注意:

  • 用你自己的主機名替換example.com。
  • 用你自己的服務名替換http://localhost:9000。
  • 為了能夠上傳大文件,在http上下文中添加client_max_body_size 10m;,只需按你的需求調整該值。默認值是1m,對大多數場景來說太低了。

非Root配置

 location ~^/files {
   proxy_buffering off;
   proxy_set_header Host $http_host;
   proxy_pass http://localhost:9000;
 }

注意:

  • 用你自己的服務名替換http://localhost:9000。
  • 用所需的路徑替換files。這不能是~^/minio,因為minio是minio中的保留字。
  • 所使用的路徑(在本例中為files)按照慣例,應設置為minio所使用的存儲桶的名稱。
  • 可以通過添加更多類似於上面定義的location定義來訪問其他存儲桶。

使用Rewrite的非Root配置

以下location配置允許訪問任何存儲桶,但只能通過未簽名的URL,因此只能訪問公開的存儲桶。

 location ~^/files {
   proxy_buffering off;
   proxy_set_header Host $http_host;
   rewrite ^/files/(.*)$ /$1 break;
   proxy_pass http://localhost:9000;
 }

注意:

  • 用你自己的服務名替換http://localhost:9000。
  • 用所需的路徑替換files。
  • 使用的存儲桶必須是公開的,通常情況是可公開讀和公開寫。
  • 使用的網址必須是無符號的,因為nginx會更改網址並使簽名無效。

多節點minio負載

upstream minio_servers {
    server minio-server-1:9000;
    server minio-server-2:9000;
}

server {
    listen 80;
    server_name www.example.com;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass       http://minio_servers;
    }
}

SSL/TLS

server {
    listen 80;
    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

server {
    listen              443 ssl;
    server_name         www.example.com;

    ssl_certificate     www.example.com.crt;
    ssl_certificate_key www.example.com.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass       http://localhost:9000;
    }
}

緩存 Caching

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m 
                 use_temp_path=off;

server {
    # ...
    location / {
        proxy_cache      my_cache;
        proxy_set_header Host $http_host;
        proxy_pass       http://localhost:9000;
    }
}

限速 Throttling

server {
    # ...
    location /images/ {
        limit_rate 200k;
        # ...
    }
}
limit_req_zone $binary_remote_addr zone=my_req_limit:10m rate=10r/s;

server {
    # ...
    location /images/ {
        limit_req zone=my_req_limit burst=20;
        # ...
    }
}
limit_conn_zone $binary_remote_addr zone=my_conn_limit:10m;

server {
    # ...
    location /images/ {
        limit_conn my_conn_limit 5;
        # ...
    }
}

實踐操作

前提條件:在同一台主機上安裝minio和nginx

操作:
1.該主機的/etc/hosts文件添加如下解析:

192.168.20.102 test.minio.com

2.nginx配置如下

# cat minio.conf
server {
    listen 80;
    server_name test.minio.com;

    location / {
        proxy_set_header Host $http_host;
        proxy_pass       http://localhost:9000;
    }
}

3.用瀏覽器訪問網址:http//test.minio.com

地址跳轉了

4.分享文件的地址還是ip

但是把分享鏈接中的ip換成域名后,是可以直接用瀏覽器訪問的,中間沒有跳轉重定向

設置環境變量:export MINIO_DOMAIN=test.minio.com,或者把配置:MINIO_DOMAIN=test.minio.com寫入到配置文件中,重啟應用后查看分享鏈接顯示的還是IP地址。

最后的操作

1.nginx配置中不代理9000端口,直接代理9001端口

server {
    listen 80;
    server_name test.minio.com;

    location / {
        proxy_pass       http://localhost:9001;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

這樣一來,用瀏覽器訪問就不會再跳轉到域名:9001端口了,登錄,web上傳文件都可以

但是使用python SDK寫這個域名訪問,就會報錯:S3 API Request made to Console port. S3 Requests should be sent to API port

使用域名訪問分享的文件地址,請求是成功了,但是瀏覽器不顯示圖片

最后的結論,nginx配置中還是代理9000端口,訪問域名跳轉到域名:9001估計是跟minio版本有關系

通過docker官網上的鏡像介紹,之前只有一個端口。現在有兩個了,區分了Console和API兩個服務的端口。原來都是共同使用9000,現在需要在啟動命令中映射兩個端口,然后指定哪個端口做哪項服務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM