官方文檔地址: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,現在需要在啟動命令中映射兩個端口,然后指定哪個端口做哪項服務