Настройка параметров nginx воркспейса¶
Info
Данные параметры имеет смысл менять только при использовании воркспейса в
виде отдельно стоящего сервиса. При совместной установке логин центра и
воркспейса на одном хост сервере это не имеет смысла, так как за https в
этом случае отвечает nginx контейнер логин центра. В этом случае вам
понадобится следующая инструкция
Warning
Данный функционал доступен начиная с версии: d-9.100.148.103
Warning
Все шаблоны конфигурации приведены как пример. Данные параметры можно менять в соответствии с вашими политиками ИБ.
Для начала нужно определить какие параметры nginx вам требуется изменить.
Основной файл конфигурации nginx.conf задан внутри дистрибутива и не подлежит
изменению. Его конфигурация определена как универсальная для большинства
клиентов. Если нам требуется усилить параметры безопасности, мы можем
определить их в блоке server для конечных точек. Это выполняется через
переопределение шаблонов которые включаются в основную конфигурацию.
Настройка параметров шаблонов¶
Если воркспейс уже был настроен, то потребуется
выполнить его остановку.
Если мы только устанавливаем воркспейс то создаем каталог для шаблонов nginx.
Нам нужно создать, или внести правки если вы уже запускали воркспейс, шаблоны
конфигураций nginx.
/om/workspace1/data/nginx_templates/workspace_common
root /home/${VAR_USER}/optimacros_middlework/bin/frontend/public;
charset utf-8;
access_log off;
error_log /var/log/nginx/error.log;
index index.html index.php;
client_max_body_size ${VAR_CLIENT_MAX_BODY_SIZE};
${VAR_ALLOW_REAL_IP_FROM}
${VAR_REAL_IP_HEADER}
# add_header X-Frame-Options SAMEORIGIN;
# add_header X-Content-Type-Options nosniff;
location ~ /\. {
deny all;
return 404;
}
location = / {
}
location / {
try_files $uri @backend;
}
location /files {
try_files $uri @backend;
}
location /auth {
try_files $uri @backend;
}
location /download {
try_files $uri @backend;
}
location /speedtest {
try_files $uri @backend_nogzip;
}
location /jsonrpc {
try_files $uri @jsonrpc;
}
location @redirect {
return 301 /?path=$uri;
}
location @backend {
root /home/${VAR_USER}/optimacros_middlework/app/public;
fastcgi_read_timeout 1800;
fastcgi_pass unix:/var/run/php/php8.1-fpm-optimacros.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
location @backend_nogzip {
root /home/${VAR_USER}/optimacros_middlework/app/public;
gzip off;
fastcgi_read_timeout 30;
fastcgi_pass unix:/var/run/php/php8.1-fpm-optimacros.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
location @jsonrpc {
proxy_pass http://127.0.0.1:3003;
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 Cookie $http_cookie;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
}
location /admin {
alias /home/${VAR_USER}/optimacros_middlework/admin/public;
try_files $uri @admin;
}
location @admin {
fastcgi_read_timeout 1800;
root /home/${VAR_USER}/optimacros_middlework/admin/public;
access_log off;
fastcgi_pass unix:/var/run/php/php8.1-fpm-optimacros.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
location /api {
alias /home/${VAR_USER}/optimacros_middlework/api/public;
try_files $uri @api;
}
location @api {
fastcgi_read_timeout 1800;
root /home/${VAR_USER}/optimacros_middlework/api/public;
access_log off;
fastcgi_pass unix:/var/run/php/php8.1-fpm-optimacros.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
include fastcgi_params;
}
${VAR_OLTP_WEB_STATUS}include /etc/nginx/sites-available/phpmyadmin;
${VAR_CLICKHOUSE_WEB_STATUS}include /etc/nginx/sites-available/clickhouse_play;
${VAR_POSTGRESQL_WEB_STATUS}include /etc/nginx/sites-available/phppgadmin;
/om/workspace1/data/nginx_templates/workspace.https
${VAR_WS_EXTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket;
dav_methods off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$proxy_host" "$upstream_addr"';
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=5r/s;
server {
listen 80 default_server;
${VAR_WS_INTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket_common;
if ($host != "${VAR_HOST_NAME}") {
return 301 https://${VAR_HOST_NAME}$request_uri;
}
include /etc/nginx/sites-available/workspace_common;
}
/om/workspace1/data/nginx_templates/workspace.ssl
include /home/optimacros_middlework/optimacros_middlework/console/commands/container/nginx/templates/http_common;
${VAR_WS_EXTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket;
server {
listen 443 ssl default_server;
listen 80 default_server;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_dhparam /home/optimacros_middlework/optimacros_middlework/console/commands/container/nginx/templates/dhparam.pem;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_tickets off;
# Будет ждать 30 секунд перед закрытием keepalive соединения
keepalive_timeout 30;
# Максимальное количество keepalive запросов от одного клиента
keepalive_requests 100;
send_timeout 10s;
client_header_timeout 10;
client_body_timeout 10;
large_client_header_buffers 8 32k;
if ($scheme = "http") {
return 301 https://${VAR_HOST_NAME}$request_uri;
}
if ($host != "${VAR_HOST_NAME}") {
return 301 https://${VAR_HOST_NAME}$request_uri;
}
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/cert.key;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=15768000" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';";
add_header Referrer-Policy "no-referrer";
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
${VAR_WS_INTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket_common;
include /etc/nginx/sites-available/workspace_common;
}
/om/workspace1/data/nginx_templates/maintenance.ssl
include /home/optimacros_middlework/optimacros_middlework/console/commands/container/nginx/templates/http_common;
${VAR_WS_EXTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket;
server {
listen 443 ssl default_server;
listen 80 default_server;
# intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_dhparam /home/optimacros_middlework/optimacros_middlework/console/commands/container/nginx/templates/dhparam.pem;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_session_tickets off;
# Будет ждать 30 секунд перед закрытием keepalive соединения
keepalive_timeout 30;
# Максимальное количество keepalive запросов от одного клиента
keepalive_requests 100;
send_timeout 10s;
client_header_timeout 10;
client_body_timeout 10;
large_client_header_buffers 8 32k;
if ($uri !~ /admin) {
return 503;
}
location @maintenance {
rewrite ^(.*)$ /index.html break;
}
error_page 503 @maintenance;
if ($scheme = "http") {
return 301 https://${VAR_HOST_NAME}$request_uri;
}
if ($host != "${VAR_HOST_NAME}") {
return 301 https://${VAR_HOST_NAME}$request_uri;
}
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/cert.key;
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
add_header Strict-Transport-Security "max-age=15768000" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';";
add_header Referrer-Policy "no-referrer";
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
${VAR_WS_INTERNAL_MODE_STATUS}include /etc/nginx/sites-available/websocket_common;
include /etc/nginx/sites-available/maintenance_common;
}
Для работы этих шаблонов нужен dhparam файл. Выполняем его генерацию.
Генерируем dhparam файл¶
Или используя большую длину ключа.
В зависимости от производительности системы это может занять более продолжительное время.
задать файлам права доступа
chmod 400 /om/workspace1/data/nginx_templates/dhparam.pem
chmod 400 /om/cert/crt.key # путь директории определяется в манифесте Воркспейса (manifest.json)
Запуск воркспейса¶
После внесенных изменений запускаем воркспейс
Диагностика и устранение проблем¶
Если в конфигурации nginx нет ошибок все должно работать штатно. При проблемах с запуском входим в контейнер
И выполняем диагностику работы nginx:
- Статус службы nginx
- Конфигурация nginx
Нам нужно найти неверный или конфликтующий параметр
После этого:
- Останавливаем воркспейс
- Вносим правки в шаблон
- Запускаем воркспейс