Настройка Virtual-hosted–style

Статья описывает ручную установку

Данная статья описывает ручной вариант настройки. В случае развёртывания с помощью Ansible-роли, при обновлении, эти настройки будут затёрты. В ближайшие релизы поддержка этого способа адресации будет доступна в Ansible-роли.

Настройка Virtual-hosted–style

Virtual-hosted-style (посмотреть в документации AWS) позволяет настроить обращение к данным вида:

1https://workspace-name.hostname.ru 2https://bucket-name.workspace-name.hostname.ru/key-name

Ниже приведены шаги для настройки сервиса Nginx, поставляемого вместе с пакетом zakroma-admin.

1 Настройка zakroma-gateway

Предположим, что у Вас:

  • hostname.ru - доменный путь до сервиса gateway
  • workspace-name - имя рабочей области, в которой распологается бакет(ы)
  • bucket-name - имя бакета, к которому настраивается доступ в Virtual-hosted–style

1.1 Добавить в конфигурацию zakroma-gateway s3_domain

1sudo vi /opt/zakroma/zakroma-gateway/cfg/config.yaml

Указать параметр s3_domain:

1s3_domain: hostname.ru

1.2 Перезапустить zakroma-gateway

1sudo systemctl restart zakroma-gateway.service --now 2sudo systemctl status zakroma-gateway.service

2. Cоздание нужных папок

1sudo mkdir -p /etc/nginx/zakroma-nginx 2sudo mkdir -p /etc/nginx/zakroma-nginx/zakroma-proxy 3sudo mkdir -p /etc/nginx/zakroma-nginx/zakroma-ssl 4sudo mkdir -p /etc/nginx/zakroma-nginx/logs

3. Сгенерировать SSL сертификаты

Необходимо сгенерировать SSL-сертификаты и разместить их в следующей директории:

1cd /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

1для бакета тот же путь но с постфиксом --b после имени воркспейса (workspace_name/s3--b.crt)

Настройку самоподписанных сертификатов можно посмотреть здесь.

4. Cоздание конфигурации nginx

4.1 Создание общей конфигурации

Для принудительной переадресации на https нужно настроить файл конфигурации:

1sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf

Добавить в файл force-ssl.conf:

1if ($scheme = "http") { 2 return 301 https://$host$request_uri; 3}

Для настройки логирования входящих запросов нужно настроить файл конфигурации:

1sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/proxy-log.conf

Добавить в файл proxy-log.conf:

1server_names_hash_bucket_size 128; 2map "" $server { 3 default "0.0.0.0"; 4} 5map "" $port { 6 default 0000; 7} 8 9log_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"';

4.2 Импорт настроек в nginx

Добавить импорт настроек в корневой файл nginx:

1sudo vi /etc/nginx/nginx.conf

Добавить внутрь блока http, перед блоком server следующие строчки:

1include /etc/nginx/zakroma-nginx/zakroma-proxy/proxy-log.conf; 2include /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-*.conf;

Все конфигурационные файлы с префиксом “zakroma-proxy-” в директории zakroma-proxy будут подтягиваться автоматически.

4.3 Настройка перенаправления

Для каждой рабочей области (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)

Содержимое файла zakroma-proxy-test-workspace-fs.conf
1sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-test-workspace-fs.conf
1# ------------------------------------------------------------ 2# workspace-name.hostname.ru 3# ------------------------------------------------------------ 4 5server { 6 # change this variables 7 set $server "127.0.0.1"; 8 set $port 8081; 9 set $workspace_name workspace-name; 10 set $base_host_name hostname; 11 client_max_body_size 8M; 12 13 # Custom SSL 14 ssl_certificate /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.crt; 15 ssl_certificate_key /etc/nginx/zakroma-nginx/zakroma-ssl/workspace_name/s3.key; 16 17 access_log "/etc/nginx/zakroma-nginx/logs/workspace_name/access.log" proxy; 18 error_log "/etc/nginx/zakroma-nginx/logs/workspace_name/error.log" warn; 19 20 21 22 23 24 25 listen 443 ssl; 26 listen [::]:443 ssl; 27 server_name "$workspace_name.$base_host_name"; 28 29 # Force SSL 30 include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf; 31 32 location ~ ^/(.*) { 33 proxy_set_header Host $http_host; 34 proxy_set_header X-Forwarded-Scheme $scheme; 35 proxy_set_header X-Forwarded-Proto $scheme; 36 proxy_set_header X-Forwarded-For $remote_addr; 37 proxy_set_header X-Real-IP $remote_addr; 38 proxy_pass http://$server:$port/s3/$1$is_args$args; 39 40 # Force SSL 41 include /etc/nginx/zakroma-nginx/zakroma-proxy/force-ssl.conf; 42 43 add_header x-forwarded-path $request_uri; 44 } 45 46}
  • Конфигурация для бакетов текущей рабочей области (см. пример zakroma-proxy-test-workspace-fs—b.conf)
Содержимое файла zakroma-proxy-test-workspace-fs--b.conf
1sudo vi /etc/nginx/zakroma-nginx/zakroma-proxy/zakroma-proxy-test-workspace-fs--b.conf
1# ------------------------------------------------------------ 2# *.workspace-name.hostname.ru 3# ------------------------------------------------------------ 4 5server {
Развернутьarrow

Чтобы конфигурации автоматически подтягивались необходимо их называть по шаблону 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оздать папки для логов: Измените название на имя вашей рабочей области и выполните команду:

1export WORKSPACE_NAME="your-workspace-name"

Команда для создания папки логов

1sudo mkdir -p /etc/nginx/zakroma-nginx/logs/$WORKSPACE_NAME

5. Перезапуск nginx

1sudo systemctl restart nginx.service --now 2sudo systemctl status nginx.service