Zwykle TLS dla żądań HTTP jest terminowany na wbudowanym reverse proxy, ale jeśli musisz skalować aplikację na wiele hostów, możesz to zmienić.
Aby użyć zewnętrznego proxy i rozłożyć żądania między węzłami, wykonaj poniższe polecenia.
Dla usługi Authentication Server (NtkAS):
$ ntk cfg setc nas.external_proxy on
$ ntk redis start
$ ntk cfg set :nas.redis_url redis://10.0.1.98:6379/cache
$ ntk as restart
Zastąp adres IP 10.0.1.98 adresem węzła, na którym będzie działać akcelerator Redis. Do skonfigurowania wysokiej dostępności akceleratora Redis zalecamy usługę VRRP. Zobacz Konfiguracja usługi REDIS z VRRP.
Dla usługi SSO (NtkSSO):
$ ntk cfg setc sso.external_proxy on
$ ntk sso restart
Polecenia wykonaj na każdym węźle, który ma należeć do puli backendu zewnętrznego load balancera.
Usługi oczekują rzeczywistego adresu IP klienta w nagłówku HTTP X-Real-IP.
Ma to znaczenie, jeśli stosujesz różne polityki bezpieczeństwa w zależności od
położenia użytkownika w sieci.
Po ponownej konfiguracji usługa NtkAS na węźle jest dostępna na tcp/5000, a
usługa NtkSSO na tcp/7000. Te punkty końcowe dodaj do puli zewnętrznego load
balancera. Wewnętrzny adres IP węzła ustalisz poleceniem
ntk net eth0 address.
Jeśli port zarządzania nie ma wartości domyślnej i aktywny jest tryb dual
instance (:nas.dual_instance_mode = on), interfejs zarządzania będzie
dostępny również na tcp/6000. Jeśli udostępniasz interfejs administracyjny
publicznie, zabezpiecz dodatkowo tę usługę. W przeciwnym razie możesz użyć
wbudowanej usługi proxy, aby uzyskać dostęp do zarządzania bezpośrednio przez
wewnętrzny adres IP węzła. Usługę VRRP możesz skonfigurować tak, aby wszystkie
węzły korzystały z jednego wewnętrznego adresu IP. Więcej szczegółów znajdziesz
w dokumentacji.
Poniżej znajdziesz przykłady konfiguracji popularnych rozwiązań równoważenia obciążenia.
Konfiguracja HAProxy dla usługi NtkAS
backend notakey-backend
mode http
balance roundrobin
option forwardfor
option httpchk
http-request set-header X-Forwarded-Port %[dst_port]
http-request set-header X-Real-IP %[src_addr]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
server node01 10.0.1.71:5000 check
server node02 10.0.1.72:5000 check
server node03 10.0.1.73:5000 check
Konfiguracja Nginx dla usługi NtkAS
http {
include conf/mime.types;
index index.html index.htm index.php;
access_log logs/access.log main;
sendfile on;
tcp_nopush on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
upstream ntkservers {
server 10.0.1.71:5000;
server 10.0.1.72:5000;
server 10.0.1.73:5000;
# Nginx open source monitors backends by analyzing requests
# If request times out, backend is marked as unavailable
# This may lead to unintended failures during appliance updates
}
; Nginx Plus config
match server_ok {
status 200;
}
server {
listen 443 ssl http2;
root /app/public;
ssl_certificate /etc/nginx/ssl/ntkchain.pem;
ssl_certificate_key /etc/nginx/ssl/ntk.key;
ssl_session_timeout 1d;
ssl_session_cache shared:MySSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
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;
ssl_prefer_server_ciphers off;
location / {
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 https;
proxy_set_header X-Forwarded-Port $server_port;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 10;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_redirect off;
proxy_pass http://ntkservers;
# Nginx Plus config
health_check interval=10 uri=/api/health match=server_ok;
}
}
}