user nginx; worker_processes auto; pid /tmp/nginx.pid; error_log /dev/stderr warn; events { worker_connections 4096; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_tokens off; charset utf-8; proxy_connect_timeout 3s; proxy_send_timeout 30s; proxy_read_timeout 30s; map $http_upgrade $connection_upgrade { default upgrade; '' close; } map $http_x_request_id $edge_request_id { "~*^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" $http_x_request_id; "~*^[0-9A-HJKMNP-TV-Z]{26}$" $http_x_request_id; default $request_id; } map $http_traceparent $trace_id { "~^[0-9a-f]{2}-(?[0-9a-f]{32})-[0-9a-f]{16}-[0-9a-f]{2}$" $valid_trace_id; default ""; } map $request_method $polling_key { GET $binary_remote_addr; default ""; } log_format json_combined escape=json '{"timestamp":"$time_iso8601","service.name":"nginx","request_id":"$edge_request_id",' '"trace_id":"$trace_id","remote_addr":"$remote_addr","host":"$host","method":"$request_method",' '"uri":"$uri","status":$status,"bytes":$body_bytes_sent,"duration":$request_time,' '"upstream_status":"$upstream_status","upstream_time":"$upstream_response_time",' '"cache":"$upstream_cache_status","tls":"$ssl_protocol","user_agent":"$http_user_agent"}'; access_log /dev/stdout json_combined; limit_req_status 429; limit_conn_status 429; limit_req_zone $binary_remote_addr zone=api:10m rate=${NGINX_RATE_LIMIT_API}; limit_req_zone $binary_remote_addr zone=auth:10m rate=${NGINX_RATE_LIMIT_AUTH}; limit_req_zone $binary_remote_addr zone=public:10m rate=${NGINX_RATE_LIMIT_PUBLIC}; limit_req_zone $polling_key zone=polling:10m rate=${NGINX_RATE_LIMIT_POLLING}; limit_req_zone $binary_remote_addr zone=downloads:10m rate=${NGINX_RATE_LIMIT_DOWNLOADS}; limit_req_zone $binary_remote_addr zone=bitrix_callbacks:10m rate=${NGINX_RATE_LIMIT_BITRIX}; limit_req_zone $binary_remote_addr zone=ws_connect:10m rate=${NGINX_RATE_LIMIT_WS}; limit_conn_zone $binary_remote_addr zone=connections:10m; proxy_cache_path /var/cache/nginx/public levels=1:2 keys_zone=public_cache:20m max_size=256m inactive=1h use_temp_path=off; client_max_body_size ${NGINX_CLIENT_MAX_BODY_SIZE}; client_body_temp_path /tmp/client_body; proxy_temp_path /tmp/proxy; upstream api_backend { server api-backend:8000; keepalive 32; } upstream keycloak_upstream { server keycloak:8080; keepalive 16; } upstream bitrix_local { server bitrix-local-app:8080; keepalive 16; } upstream bitrix_sync_upstream { server bitrix-sync:8080; keepalive 8; } upstream frontend_dev { server ${EXPO_DEV_SERVER_HOSTPORT}; keepalive 8; } include /etc/nginx/generated/site.conf; }