Nginx反向代理minio踩坑記錄

荒野游侠發表於2024-03-14

背景:

minio是3臺伺服器叢集模式。所以想透過nginx來做負載,進行反向代理訪問。

1.Nginx配置中location設定問題

問題描述:

輸入地址:https://hcmminio.xxx.com/minio後,瀏覽器無法開啟頁面。會有類似404的錯誤。透過F12除錯發現有跨域錯誤,類似如下:

Referrer Policy: strict-origin-when-cross-origin

其實根本原因,不是跨域的問題,是因為nginx的配置有問題,錯誤的配置如下(注意紅色字型部分):

http {
    ...
    upstream minioconsole {
        server 192.10.16.203:9001; #minio叢集地址(console)
        server 192.10.16.204:9001;
        server 192.10.16.210:9001;
    }

    server {
        listen 443 ssl;
        server_name hcmminio.xxx.com;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate      /etc/nginx/ssl/xxx.com.pem;
        ssl_certificate_key  /etc/nginx/ssl/xxx.com.key;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        下面的location不能是/minio,因為minio訪問的地址沒有這個路徑,所以報錯,這裡必須是跟/
        location /minio {
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   Host             $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_pass         http://minioconsole;
        }

    }
}

如上面示例,將 location /minio {修改為 location / { 就能訪問登入頁面了。

2.Nginx配置中,WebSocket connection的錯誤

問題描述

在瀏覽桶中的列表的時候,始終在loading,無法載入桶內的檔案列表。並且是在https協議的情況下才有,透過F12除錯,可以看到有很多的WebSocket connection的錯誤。

這個根本原因可以參考https://www.cnblogs.com/joshua317/p/15217735.html 文章內容所述。

解決辦法是在nginx配置中,新增如下引數(紅色字型標註)

http {
    ...
    upstream minioconsole {
        server 192.10.16.203:9001; #minio叢集地址(console)
        server 192.10.16.204:9001;
        server 192.10.16.210:9001;
    }

    server {
        listen 443 ssl;
        server_name hcmminio.xxx.com;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_certificate      /etc/nginx/ssl/xxx.com.pem;
        ssl_certificate_key  /etc/nginx/ssl/xxx.com.key;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        
        location / {
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   Host             $http_host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_pass         http://minioconsole;
        }

    }
}

重新載入nginx配置(nginx -s reload)或重啟nginx服務,問題解決。

相關文章