4.1. Настройка веб-сервера #

4.1.1. Формирование сертификатов безопасного соединения
4.1.2. Формирование файла конфигурации веб-сервера

4.1.1. Формирование сертификатов безопасного соединения #

Если в вашей инфраструктуре нет центра сертификации, для обеспечения безопасности соединения допускается использование самоподписанного сертификата.

Чтобы выпустить сертификат, выполните следующие действия в терминале сервера от имени администратора (root):

  1. Перейдите в каталог /etc/ssl.

  2. Сгенерируйте закрытый ключ и самоподписанный сертификат.

    openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/progate.key \
    -out /etc/ssl/certs/progate.crt

    Примечание

    Команда выше генерирует файл ключа и самоподписанный сертификат, действительные в течение 365 дней. Укажите следующие значения по запросу команды:

    • Country Name (2 letter code) [AU]: двухсимвольный код страны.

    • State or Province Name (full name) [Some-State]: название региона.

    • Locality Name (eg, city) []: название города.

    • Organization Name (eg, company) [Internet Widgits Pty Ltd]: название компании.

    • Organizational Unit Name (eg, section) []: название структурного подразделения компании.

    • Common Name (e.g. server FQDN or YOUR name) []: адрес, который будет использоваться для подключения к веб-приложению Postgres ProGate, например progate.example.com.

    • Email Address []: электронная почта администратора.

4.1.2. Формирование файла конфигурации веб-сервера #

Конфигурация веб-сервера обычно располагается в каталоге /etc/nginx, однако структура файлов может отличаться в зависимости от дистрибутива операционной системы. Например, конфигурация виртуального сервера располагается в других каталогах для следующих операционных систем:

  • Для операционных систем на основе Debian (например, Astra Linux) — в каталоге /etc/nginx/sites-enabled/.

  • Для операционных систем на основе Red Hat (например, RED OS) — в каталоге /etc/nginx/vhosts/.

За подробной информацией о расположении и структуре дерева кофигурации обратитесь к официальной документации вашей операционной системы.

Процедура настройки, описанная ниже, предполагает, что конфигурация веб-сервера располагается в каталоге /etc/nginx/, а параметры виртуального сервера — в каталоге /etc/nginx/conf.d/. Выполните следующие действия, чтобы настроить веб-сервер:

  1. Разместите файл progate.crt в каталоге /etc/ssl/certs/.

  2. Разместите файл progate.key в каталоге /etc/ssl/private/.

  3. Владельцем файлов progate.crt и progate.key должен быть администратор (root) с правами доступа 644 rw-r--r-- и 600 rw------- соответственно. Чтобы изменить права доступа, выполните следующую команду:

    chown root:root /etc/ssl/certs/progate.crt /etc/ssl/private/progate.key
    chmod 600 /etc/ssl/private/progate.key
    chmod 644 /etc/ssl/certs/progate.crt
  4. Создайте файл конфигурации /etc/nginx/conf.d/progate.example.com.conf виртуального сервера со следующим содержимым:

     server {
         listen 80 default_server;
         server_name _;
    
         return 301 https://progate.example.com$request_uri;
     }
    
     server {
         listen 443 ssl default_server;
         server_name progate.example.com;
    
         ssl_certificate /etc/ssl/certs/progate.crt;
         ssl_certificate_key /etc/ssl/private/progate.key;
    
         ssl_protocols TLSv1.3;
         ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
         ssl_prefer_server_ciphers off;
         sub_filter_once off;
         sub_filter **CSP_NONCE** $request_id;
         add_header X-Frame-Options "SAMEORIGIN";
         add_header X-Content-Type-Options "nosniff";
         add_header X-XSS-Protection "1; mode=block";
         add_header Strict-Transport-Security "max-age=31536000";
         add_header Content-Security-Policy "
             default-src 'none';
             script-src 'self' 'nonce-$request_id';
             style-src 'self' 'nonce-$request_id';
             img-src 'self' data:;
             font-src 'self';
             connect-src 'self';
             form-action 'self';
             base-uri 'self';
             frame-ancestors 'none';
             frame-src 'none';
             object-src 'none';
         " always;
    
         root /opt/pgpro/progate/ui;
    
         location = /docs {
             try_files /index.html =404;
         }
    
         location = /docs/ {
             try_files /index.html =404;
         }
    
         location ~ ^/docs/(ru|en)/ {
             try_files $uri =404;
         }
    
         location / {
             index index.html;
             try_files $uri $uri/ /index.html;
         }
    
         location /api {
             try_files $uri @api;
         }
    
         location @api {
             proxy_pass http://127.0.0.1:8081;
             proxy_http_version 1.1;
             proxy_set_header Host $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_read_timeout 180s;
    
         }
    
         location ~ /\.(ht|git|svn|env) {
             deny all;
         }
    
         location ~ /\. {
             deny all;
         }
     }

    Чтобы раздел документации веб-приложения работал корректно, настройте маршрутизацию пути /docs. Для этого задайте отдельные параметры location для /docs. Если указать только общий параметр location / с try_files, запросы к /docs и /docs/ могут обрабатываться иначе, чем ожидает веб-приложение (в том числе могут возникать ошибки доступа к документации). Укажите следующие параметры:

    • location = /docs и location = /docs/: точное совпадение URI. Запрос возвращает файл index.html точки входа в документацию.

    • location ~ ^/docs/(ru|en)/: статические файлы документации для локалей ru и en. Если файл отсутствует по URI, возвращается ответ 404 без файла index.html, чтобы не скрывать ошибочные пути. При необходимости поддержки других языков укажите дополнительные коды языков в регулярном выражении.

    Примечание

    В параметре конфигурации root /opt/pgpro/progate/ui; указывается каталог, в который по умолчанию устанавливается пакет progate-gui. При переносе содержимого пакета в другой каталог измените значение этого параметра, чтобы отразить фактическое расположение содержимого.

    Параметр конфигурации proxy_pass http://127.0.0.1:8081; предполагает, что для следующих параметров конфигурации серверной части Postgres ProGate заданы соответствующие значения: PROGATE_HTTP_SERVER_HOST="127.0.0.1" и PROGATE_HTTP_SERVER_PORT="8081".

  5. Проверьте корректность конфигурации, выполнив команду nginx -t. При отсутствии ошибок вывод будет следующим:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

    Если найдены ошибки, проверьте корректность указанных значений параметров.

  6. Если ошибки не найдены, перезапустите веб-сервер, выполнив команду systemctl restart nginx. После перезапуска веб-приложение Postgres ProGate будет доступно по адресу https://progate.example.com.