lilydocs
HTTP APIWebSocketConsumer
Çalıştırma3 dk okuma

TLS, proxy ve heartbeat

WSS listener’ı kurun, güvenilir proxy zincirinden client IP çözün ve bağlantı canlılığını sınırlandırın.

WebSocket server HTTP/1.1 Upgrade kullanır. TLS, client IP ve heartbeat politikası listener'a aittir; mesaj DTO'sundan veya istemcinin iddia ettiği header'dan üretilmez.

WSS listener#

Aşağıdaki dosya WSS, dış container ve health kayıt örneklerini birlikte gösterir. tokio-util = "0.7" ve DI bağımlılıkları gerekir. Config-backed wss fonksiyonu için [websocket].enabled = true ve Origin politikası da ayarlanmalıdır.

application.rs
use std::{path::Path, sync::Arc};
use lilyrs::websocket::ApplicationContainer;
use lilyrs::websocket::{RustlsConfig, WsApp, WsAppBuilder};
use tokio_util::sync::CancellationToken;

pub async fn wss(cert: &Path, key: &Path) -> Result<WsApp, Box<dyn std::error::Error>> {
    let tls = RustlsConfig::from_pem_file(cert, key).await?;
    Ok(WsAppBuilder::default().rustls_config(tls).build().await?)
}
pub async fn external_container(container: &Arc<ApplicationContainer>)
    -> Result<(), Box<dyn std::error::Error>>
{
    let app = WsAppBuilder::new("127.0.0.1:8081")
        .container(Arc::clone(container)).build().await?;
    app.close().await?; // Başlamamış app de kapanır; hata varsa burada caller'a döner.
    container.close().await?; // Dış container'ı caller başarıdan sonra kapatır.
    Ok(())
}
pub async fn run(app: WsApp, shutdown: CancellationToken)
    -> Result<(), Box<dyn std::error::Error>>
{
    let dependencies = app.required_dependency_health();
    dependencies.register_required("orders.store")?;
    // Gerçek probe sonucu geldiğinde mark_healthy / mark_unhealthy çağrılır.
    let _initial_health = app.health_snapshot()?;
    let _initial_metrics = app.metrics_snapshot();
    app.start_with_cancellation(shutdown).await?;
    Ok(())
}

Tam örnek dosyasını indirin.

Sertifika ve private key dosyalarını caller sağlar. wss app'i build eder; dönen app üzerinde start veya close yolunu tamamlayın. [websocket] içine PEM alanı eklemek otomatik TLS kurulumu değildir; bu sürümde authority .rustls_config(...) seçimidir.

TLS sınırı#

Rustls listener ALPN HTTP/1.1'e göre seçilir. Shared RustlsConfig client CA ile TLS client authentication için kullanılabilir; bu kontrolden otomatik application Principal üretilmez. Kimlik için identity middleware ayrıca gerekir.

HTTP/2 extended CONNECT/RFC 8441, HTTP/3 veya compression extension desteği varsaymayın. is_secure() doğrudan Lily listener'ının TLS durumudur. Proxy'de TLS sonlandırıp iç bağlantıyı plaintext kullanıyorsanız X-Forwarded-Proto veya HTTPS Origin bu değeri true yapmaz.

Güvenilir proxy#

ServerConfig.trusted_proxy_cidrs typed TrustedProxyNetwork listesi, merkezi config ise CIDR string'leri alır. Yalnız gerçekten yönettiğiniz proxy ağlarını tanımlayın. Default liste boştur.

Doğrudan socket peer güvenilir değilse forwarding metadata'sından client IP türetilmez. Güvenilir peer için X-Forwarded-For sağdan sola ilk güvenilmeyen hop'a kadar çözülür. Malformed veya fazla uzun trusted zincir 400 ile identity öncesinde reddedilir. Hop cap varsayılan 16, aralığı 1..=64'tür.

Normalized client_ip, peer_addr, via_trusted_proxy bilgilerini kullanın. Raw forwarding veya ayrılmış edge identity header'larını doğrulanmış kullanıcı kimliği gibi ele almayın. Handshake rate limiting güvenilir anahtar seçimine dayanır.

Heartbeat ve idle#

Varsayılan Ping aralığı 30 saniye, Pong bekleme 10 saniye, application idle süresi 60 saniyedir. Uzun action sırasında reader control frame'lerini işlemeyi sürdürür. Ping/Pong trafiği application mesaj kuyruğundan ayrıdır.

Application idle, connection uptime ve message age farklı ölçümlerdir. Proxy idle timeout'unuzla heartbeat ayarlarını birlikte değerlendirin. Tek frame, reassembled mesaj ve outbound write limitleri backpressure sayfasındadır.

Bu sayfanın kaynakları v0.1.0

Anlatım, incelenen framework commit’ine dayanır.

HIZLI BAŞLANGIÇ
Dokümantasyon
Kaynak kod