Runtime State Sharing

Learn how to enable runtime state sharing with NGINX as a Service for Azure

NGINX as a Service for Azure supports runtime state sharing using the Zone Synchronization module to synchronize shared memory zones across NGINXaaS instances.

With runtime state sharing, NGINXaaS instances can share some state data between them, including:

Note:
sync parameter with a directive describing shared memory zones, cannot be added to an existing memory zone that was not configured to sync and cannot be removed from an existing memory zone that was configured to sync. To switch, consider removing the directive before reapplying it with the desired parameters.

For information on enabling synchronization for rate limiting with NGINXaaS for Azure, please visit the Rate Limiting documentation.

Configuring runtime state sharing among NGINXaaS for Azure deployment cluster instances

To enable runtime state sharing, edit the NGINXaaS deployment’s NGINX configuration to create a server with the zone_sync directive in the top-level stream block. The stream server block containing the zone_sync directive should use a local resolver at 127.0.0.1:49153 and provide a listen directive with only a port for the TCP server. The chosen port should match the port used with zone_sync_server directive. NGINXaaS cluster instances should be identified using domain name internal.nginxaas.nginx.com and resolved using resolve parameter of the zone_sync_server directive.

stream {
  resolver 127.0.0.1:49153 valid=20s;
  
  server {
    listen 9000; # should match the port specified with zone_sync_server
    
    zone_sync;
    zone_sync_server internal.nginxaas.nginx.com:9000 resolve;
  }
}

Enable the SSL/TLS protocol for connections to another cluster instance of the NGINXaaS for Azure deployment

To allow SSL connections between cluster instances, edit the NGINXaaS deployment’s NGINX configuration to enable the zone_sync_ssl directive along with zone_sync directive in the top-level stream block. The stream server block containing the zone_sync_ssl directive should specify the ssl parameter with the listen directive for the TCP server. ssl_certificate and ssl_certificate_key directives can reference a Key Vault certificate attached to the deployment.

stream {
  resolver 127.0.0.1:49153 valid=20s;
  
  server {
    listen 9000 ssl;
    
    ssl_certificate     /opt/ssl/server.crt;
    ssl_certificate_key /opt/ssl/server.key;

    zone_sync;
    zone_sync_server internal.nginxaas.nginx.com:9000 resolve;
    zone_sync_ssl    on;
  }
}

Enable verification of certificate of another cluster instance of the NGINXaaS for Azure deployment

To enable verification of the cluster instance certificate edit the NGINXaaS deployment’s NGINX configuration to enable the zone_sync_ssl_verify directive along with zone_sync directive in the top-level stream block and provide the zone_sync_ssl_trusted_certificate directive. zone_sync_ssl_trusted_certificate directive can reference a Key Vault certificate attached to the deployment. The zone_sync_ssl_name directive if used, should provide the name parameter as internal.nginxaas.nginx.com.

stream {
  resolver 127.0.0.1:49153 valid=20s;
  
  server {
    listen 9000 ssl;
    
    ssl_certificate     /opt/ssl/server.crt;
    ssl_certificate_key /opt/ssl/server.key;

    zone_sync;
    zone_sync_server internal.nginxaas.nginx.com:9000 resolve;
    
    zone_sync_ssl                     on;
    zone_sync_ssl_verify              on;
    zone_sync_ssl_trusted_certificate /opt/ssl/server_ca.pem;
  }
}

Set up certificate-based authentication across cluster instances of the NGINXaaS for Azure deployment

To set up certificate-based authentication across the cluster instances edit the NGINXaaS deployment’s NGINX configuration to enable the ssl_verify_client directive along with zone_sync directive in the top-level stream block and provide the ssl_client_certificate directive. zone_sync_ssl_certificate, zone_sync_ssl_certificate_key and ssl_client_certificate directives can reference a Key Vault certificate attached to the deployment.

stream {
  resolver 127.0.0.1:49153 valid=20s;
  
  server {
    listen 9000 ssl;
    
    ssl_certificate     /opt/ssl/zone_sync.crt;
    ssl_certificate_key /opt/ssl/zone_sync.key;
    ssl_verify_client       on;
    ssl_client_certificate /opt/ssl/zone_sync_ca.pem;

    zone_sync;
    zone_sync_server internal.nginxaas.nginx.com:9000 resolve;
    
    zone_sync_ssl                     on;
    zone_sync_ssl_verify              on;
    zone_sync_ssl_trusted_certificate /opt/ssl/zone_sync_ca.pem;
    
    zone_sync_ssl_certificate     /opt/ssl/zone_sync.crt;
    zone_sync_ssl_certificate_key /opt/ssl/zone_sync.key;
  }
}

Refer to Runtime State Sharing for guidance on using other directives from the Zone Synchronization module