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