Обзор
Особенности конфигурации IQChannels:
- Приложение использует два разных порта:
:3001
— виджет, внешнее API.:3002
— панель управления, рабочее место оператора, внутреннее API.
- Требуется поддержка проксирования постоянных подключений от клиента к серверу (WebSocket и HTML5 SSE).
- Для внешнего API обязательно использование TLS, т.к. сейчас многие внешние прокси-северы еще плохо поддерживают WebSocket-соединения.
- Для внутреннего API и рабочего места оператора рекомендовано использование TLS, т.к. Chrome разрешает только защищенным сайтам отправлять нативные уведомления.
Архитектура установки с одним веб-сервером
Архитектура установки с двумя веб-серверами (публичным и внутренним)
Конфигурация публичного веб-сервера
upstream iqchannels-public { server 127.0.0.1:3001; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; listen 443 ssl; server_name iqchannels.example.com; access_log /var/log/nginx/iqchannels.access.log; error_log /var/log/nginx/iqchannels.error.log; client_max_body_size 10m; root "/var/www"; ssl_certificate /etc/path-to-chain.pem; ssl_certificate_key /etc/path-to-key.pem; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location /public/api/v1/sse { proxy_pass http://iqchannels-public; proxy_http_version 1.1; proxy_buffering off; proxy_cache off; chunked_transfer_encoding off; proxy_set_header Connection ''; proxy_set_header Host $http_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; add_header Pragma "no-cache"; add_header Cache-Control "private, must-revalidate"; } location /public { proxy_pass http://iqchannels-public; proxy_redirect default; proxy_read_timeout 30; proxy_connect_timeout 30; proxy_set_header Host $http_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; add_header Pragma "no-cache"; add_header Cache-Control "private, must-revalidate"; } location /widget { proxy_pass http://iqchannels-public; proxy_redirect default; proxy_read_timeout 30; proxy_connect_timeout 30; proxy_set_header Host $http_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; add_header Pragma "no-cache"; add_header Cache-Control "private, must-revalidate"; } }
Конфигурация внутреннего веб-сервера
upstream iqchannels-private { server 127.0.0.1:3002; } server { listen 80; listen 443 ssl; server_name iqchannels-private.example.com; ssl_certificate /etc/path-to-chain.pem; ssl_certificate_key /etc/path-to-key.pem; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location /api/stream { proxy_pass http://iqchannels-private; proxy_http_version 1.1; proxy_buffering off; proxy_cache off; proxy_read_timeout 600s; chunked_transfer_encoding off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_set_header Host $http_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; add_header Pragma "no-cache"; add_header Cache-Control "private, must-revalidate"; } location / { proxy_pass http://iqchannels-private; proxy_redirect default; proxy_read_timeout 30; proxy_connect_timeout 30; proxy_set_header Host $http_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; add_header Pragma "no-cache"; add_header Cache-Control "private, must-revalidate"; } }