Virtual-hosted-style (посмотреть в документации AWS) позволяет настроить обращение к данным вида:
https://workspace-name.hostname.ru
https://bucket-name.workspace-name.hostname.ru/key-name
Ниже приведены шаги для настройки сервиса Nginx, поставляемого вместе с пакетом zakroma-admin.
Предположим, что у Вас:
sudo vi /opt/zakroma/zakroma-gateway/cfg/config.yaml
Указать параметр dns:
dns:
base_domain: "hostname.ru"
virtual_style:
prefix_word: s3
path_style:
prefix_word: ps
sudo systemctl restart zakroma-gateway.service --now
sudo systemctl status zakroma-gateway.service
sudo mkdir -p /etc/nginx/zakroma-nginx
sudo mkdir -p /etc/nginx/zakroma-nginx/zakroma-proxy
sudo mkdir -p /etc/nginx/zakroma-nginx/zakroma-ssl
sudo mkdir -p /etc/nginx/zakroma-nginx/logs
Необходимо сгенерировать SSL-сертификаты и разместить их в следующей директории:
cd /etc/nginx/zakroma-nginx/zakroma-ssl
3.1 Сертификат для рабочей области:
workspace-name.hostname.ru
3.2 Wild card cертификат для бакетов:
*.workspace-name.hostname.ru, где вместо * можно подставить имя бакета, если не хочется использовать wild card сертификат.
Путь сертефиката формируется следующим образом:
key путь: /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.key
crt путь: /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.crt
для бакета тот же путь но с постфиксом --b после имени воркспейса (workspace_name/s3--b.crt)
Настройку самоподписанных сертификатов можно посмотреть здесь
Для принудительной переадресации на https нужно настроить файл конфигурации:
sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf
Добавить в файл force-ssl.conf:
if ($scheme = "http") {
return 301 https://$host$request_uri;
}
Для настройки логирования входящих запросов нужно настроить файл конфигурации:
sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/proxy-log.conf
Добавить в файл proxy-log.conf:
server_names_hash_bucket_size 128;
map "" $server {
default "0.0.0.0";
}
map "" $port {
default 0000;
}
log_format proxy '[$time_local] $upstream_cache_status $upstream_status $status - $request_method $scheme $host "$request_uri" [Client $remote_addr] [Length $body_bytes_sent] [Gzip $gzip_ratio] [Sent-to $server : $port] "$http_user_agent" "$http_referer"';
Добавить импорт настроек в корневой файл nginx:
sudo vi /etc/nginx/nginx.conf
Добавить внутрь блока http, перед блоком server следующие строчки:
include /etc/nginx/zakroma-nginx/zakroma-proxy/proxy-log.conf;
include /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-*.conf;
Все конфигурационные файлы с префиксом "zakroma-proxy-" в директории zakroma-proxy будут подтягиваться автоматически.
Для каждой рабочей области (workspace), для которой нужен Virtual-hosted–style, необходимо добавить параметры перенаправления, указанные в двух файлах конфигурации в директорию /etc/nginx/zakroma-nginx/zakroma-proxy/:
Для текущей версии используйте только стандартные порты для http 80, для https 443
Взяв пример конфигурации (см ниже), необходимо поменять следующие параметры, для каждой из двух конфигураций (для рабочей области, для бакетов в рабочей области):
измените test-workspace-fs на название своей рабочей области в названии файла
$server - ip/host до zakroma-gateway
$port - port до zakroma-gateway
$workspace_name имя рабочей области
$base_host_name базовый доменный адрес
client_max_body_size - размер максимального парта (взять из конфигурации zakroma-gateway "max_request_body")
заменить workspace_name в ssl_certificate, ssl_certificate_key, access_log, error_log на имя вашей рабочей области
Конфигурация для рабочей области (см. пример zakroma-proxy-test-workspace-fs.conf)
sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-test-workspace-fs.conf
# ------------------------------------------------------------
# workspace-name.hostname.ru
# ------------------------------------------------------------
server {
# change this variables
set $server "127.0.0.1";
set $port 8081;
set $workspace_name workspace-name;
set $base_host_name hostname;
client_max_body_size 8M;
# Custom SSL
ssl_certificate /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.crt;
ssl_certificate_key /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.key;
access_log "/etc/nginx/zakroma-nginx/logs/workspace_name/access.log" proxy;
error_log "/etc/nginx/zakroma-nginx/logs/workspace_name/error.log" warn;
listen 443 ssl;
listen [::]:443 ssl;
server_name "$workspace_name.$base_host_name";
# Force SSL
include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf;
location ~ ^/(.*) {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$server:$port/s3/$1$is_args$args;
# Force SSL
include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf;
add_header x-forwarded-path $request_uri;
}
}
sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-test-workspace-fs--b.conf
# ------------------------------------------------------------
# *.workspace-name.hostname.ru
# ------------------------------------------------------------
server {
# change this variables
set $server "127.0.0.1";
set $port 8081;
set $workspace_name workspace-name;
set $base_host_name hostname;
client_max_body_size 8M;
# Custom SSL
ssl_certificate /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3--b.crt;
ssl_certificate_key /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3--b.key;
access_log "/etc/nginx/zakroma-nginx/logs/workspace_name/access--b.log" proxy;
error_log "/etc/nginx/zakroma-nginx/logs/workspace_name/error--b.log" warn;
listen 443 ssl;
listen [::]:443 ssl;
server_name "*.$workspace_name.$base_host_name";
# Force SSL
include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf;
location ~ ^/(.*) {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://$server:$port/s3/$1$is_args$args;
# Force SSL
include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf;
add_header x-forwarded-path $request_uri;
}
}
Чтобы конфигурации автоматически подтягивались необходимо их называть по шаблону zakroma-proxy-*.conf Рекомендация для конфигурации бакетов называть с таким же именем, добавляя в конце постфикс --b например zakroma-proxy-test-workspace-fs--b.conf
Расположение логов:
access_log /etc/nginx/zakroma-nginx/logs/workspace-name/access.log
error_log /etc/nginx/zakroma-nginx/logs/workspace-name/error.logгде workspace_name - имя рабочей области, для бакета тот же путь но с постфиксом --b (workspace_name/access--b.log )
Cоздать папки для логов:
Измените название на имя вашей рабочей области и выполните команду:
export WORKSPACE_NAME="your-workspace-name"
Команда для создания папки логов
sudo mkdir -p /etc/nginx/zakroma-nginx/logs/$WORKSPACE_NAME
sudo systemctl restart nginx.service --now
sudo systemctl status nginx.service