Configure NGINX Proxy for Buckit Server
The following documentation provides a baseline for configuring NGINX to proxy requests to Buckit in a Linux environment. It is not intended as a comprehensive approach to NGINX, proxying, or reverse proxying in general. Modify the configuration as necessary for your infrastructure.
This documentation assumes the following:
An existing NGINX deployment
An existing Buckit deployment
A DNS hostname which uniquely identifies the Buckit deployment
There are two models for proxying requests to the Buckit Server API and the Buckit Console:
Create or configure a dedicated DNS name for the Buckit service.
For the Buckit Server S3 API, proxy requests to the root of that domain.
For the Buckit Console Web GUI, proxy requests to the /console subpath.
For example, given the hostname buckit.example.net:
Proxy requests to the root
https://buckit.example.netto the Buckit Server listening onhttps://buckit.local:9000.Proxy requests to the subpath
https://buckit.example.net/console/uito the Buckit Console listening onhttps://buckit.local:9001.
The following location blocks provide a template for further customization in your unique environment:
upstream buckit_s3 {
least_conn;
server buckit-01.internal-domain.com:9000;
server buckit-02.internal-domain.com:9000;
server buckit-03.internal-domain.com:9000;
server buckit-04.internal-domain.com:9000;
}
upstream buckit_console {
least_conn;
server buckit-01.internal-domain.com:9001;
server buckit-02.internal-domain.com:9001;
server buckit-03.internal-domain.com:9001;
server buckit-04.internal-domain.com:9001;
}
server {
listen 80;
listen [::]:80;
server_name buckit.example.net;
# Allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# Disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass https://buckit_s3; # This uses the upstream directive definition to load balance
}
location /console/ui/ {
rewrite ^/console/ui/(.*) /$1 break;
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
# To support websockets in Buckit versions released after January 2023
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
# Uncomment the following line to set the Origin request to an empty string
# proxy_set_header Origin '';
chunked_transfer_encoding off;
proxy_pass https://buckit_console; # This uses the upstream directive definition to load balance
}
}
The S3 API signature calculation algorithm does not support proxy schemes where you host the Buckit Server API such as example.net/s3/.
You must also set the following environment variables for the Buckit deployment:
Set MINIO_BROWSER_REDIRECT_URL to the proxy host FQDN of the Buckit Console (
https://example.net/console/ui)
Create or configure separate, unique subdomains for the Buckit Server S3 API and for the Buckit Console Web GUI.
For example, given the root domain of example.net:
Proxy request to the subdomain
buckit.example.netto the Buckit Server listening onhttps://buckit.local:9000Proxy requests to the subdomain
console.example.netto the Buckit Console listening onhttps://buckit.local:9001
The following location blocks provide a template for further customization in your unique environment:
upstream buckit_s3 {
least_conn;
server buckit-01.internal-domain.com:9000;
server buckit-02.internal-domain.com:9000;
server buckit-03.internal-domain.com:9000;
server buckit-04.internal-domain.com:9000;
}
upstream buckit_console {
least_conn;
server buckit-01.internal-domain.com:9001;
server buckit-02.internal-domain.com:9001;
server buckit-03.internal-domain.com:9001;
server buckit-04.internal-domain.com:9001;
}
server {
listen 80;
listen [::]:80;
server_name buckit.example.net;
# Allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# Disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://buckit_s3; # This uses the upstream directive definition to load balance
}
}
server {
listen 80;
listen [::]:80;
server_name console.example.net;
# Allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# Disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
# To support websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://buckit_console/; # This uses the upstream directive definition to load balance
}
}
The S3 API signature calculation algorithm does not support proxy schemes where you host the Buckit Server API on a subpath, such as buckit.example.net/s3/.
You must also set the following environment variables for the Buckit deployment:
Set MINIO_BROWSER_REDIRECT_URL to the proxy host FQDN of the Buckit Console (
https://console.example.net/)