NGINX Modülleri Artık Rust’ta Yazılabiliyor

Rust programlama dili, istikrarı, güvenliği, zengin ekosistemi ve güçlü topluluk desteği nedeniyle güçlü ve popüler bir seçim olarak ortaya çıkmıştır.

NGINX, internetteki web sitelerinin önemli bir kısmına güç veren, yüksek performanslı, açık kaynaklı bir web sunucusu ve ters proxy sunucu yazılımıdır. İlk olarak 2002 yılında Igor Sysoev tarafından oluşturulan NGINX, o zamandan beri web barındırma, içerik dağıtımı ve uygulama dağıtımı alanlarında gelişti ve yaygın bir popülerlik kazandı. Performansı, ölçeklenebilirliği ve çok yönlülüğü ile bilinir ve bu da onu web içeriği sunmak ve internet trafiğini verimli bir şekilde yönetmek için çok önemli bir bileşen haline getirir.

NGINX’in üç temel işlevi şunlardır:

    • Web Sunucusu: NGINX öncelikle HTTP ve HTTPS isteklerini işleyen bir web sunucusu olarak çalışır. HTML dosyaları, resimler ve JavaScript gibi statik web içeriğini sunabilir, bu da onu web sitelerini ve web uygulamalarını barındırmak için önemli bir bileşen haline getirir.
    • Ters Proxy Sunucusu: NGINX, ters proxy sunucusu olarak çalışabilir ve istemci istekleri ile arka uç sunucuları arasında aracı görevi görebilir. Genellikle gelen istekleri birden fazla arka uç sunucusuna dağıtmak, yük dengeleme ve hata toleransı sağlamak için kullanılır. Bu özellikle trafiğin yoğun olduğu ortamlarda değerlidir.
    • Yük Dengeleyici: NGINX, gelen ağ trafiğini birden fazla sunucuya dağıtarak bir yük dengeleyici görevi görebilir. Bu, sunucuların aşırı yüklenmemesini sağlar, kaynak kullanımını optimize eder ve kullanıcılara kusursuz bir deneyim sunar.

Başlangıçta ngx-rust, NGINX ile Istio uyumlu bir servis ağı ürününün geliştirilmesini hızlandırmak için yaratıldı. Ancak bu proje bir süre hareketsiz kaldı ve bu süre zarfında topluluk projeyle aktif olarak ilgilendi, depoyu çatalladı ve projelerini ngx-rust tarafından sağlanan Rust bağlama örneklerine dayanarak oluşturdu.

Daha yakın bir zamanda, F5’in Dağıtılmış Bulut Bot Savunması ekibi, NGINX proxy’lerinin koruma hizmetlerine entegrasyonunu talep etti. Bu durum yeni bir modülün geliştirilmesini gerektirdi. Aynı zamanda F5, Rust portföyünü genişletmeyi ve gelişen müşteri ihtiyaçlarını karşılamak için geliştirici deneyimini geliştirmeyi hedefledi. Dahili inovasyon sponsorlukları ve orijinal ngx-rust yazarıyla yapılan işbirliğiyle F5, ngx-rust projesini yeniden canlandırdı. Bu canlanma, topluluk kullanımı için gelişmiş belgelere ve iyileştirilmiş yapı ergonomisine sahip ngx-rust kasalarının yayınlanmasını içeriyordu.

NGINX, işlevselliğinin çoğunu uygulayan temel yapı taşları olarak modüllere güvenir. Modüller aynı zamanda NGINX kullanıcılarının özelliklerini özelleştirmelerine ve belirli kullanım durumlarını desteklemelerine olanak tanır. Geleneksel olarak NGINX, C dilinde yazılmış modülleri destekler, ancak bilgisayar bilimi ve programlama dili teorisindeki ilerlemeler, Rust gibi dillerin NGINX modül geliştirmesinde kullanılmasının kapısını açmıştır.

Ngx-rust’a başlamak için yerel olarak kaynaktan inşa etmeyi, ngx-rust projesine katkıda bulunmayı veya sandığı Crates.io’dan almayı seçebilirsiniz. Ngx-rust README, katkıda bulunma ve yerel yapım gereksinimlerine ilişkin yönergeler sağlar. Ngx-rust henüz geliştirme aşamasındayken F5, topluluk desteğiyle kalitesini ve özelliklerini geliştirmeyi planlıyor.

Ngx-rust projesi iki önemli kasadan oluşuyor:

    • nginx-sys: Bu kasa, NGINX kaynak kodundan bağlamalar oluşturarak yabancı işlev arayüzü (FFI) bağlamalarının oluşturulmasını otomatik hale getirir. bindgen kod otomasyonu.
    • ngx: Ana kasa Rust tutkal kodunu, API’leri uygular ve nginx-sys’yi yeniden dışa aktarır. Modül yazarları, NGINX ile ngx sembolleri aracılığıyla etkileşime girer ve nginx-sys’nin yeniden dışa aktarımı, açık içe aktarma ihtiyacını ortadan kaldırır.

Bir ngx-rust projesi için çalışma alanı başlatma süreci, bir çalışma dizini oluşturmayı, bir Rust projesini başlatmayı ve bağımlılıkları ayarlamayı içerir:

cd $YOUR_DEV_FOLDER
mkdir ngx-rust-howto
cd ngx-rust-howto
cargo init --lib

Bir Rust modülü oluşturmak, aşağıdakilerin uygulanmasını içerir: HTTPModule NGINX giriş noktalarını tanımlayan özellik: postconfiguration, preconfiguration, create_main_conf, ve dahası. Yeni modülün yalnızca kendi özel görevi için gerekli olan işlevleri uygulaması gerekiyor. Aşağıdaki kod ve örnekte postconfiguration yöntemin uygulanması:

struct Module;
struct Module; 

impl http::HTTPModule for Module { 
    type MainConf = (); 
    type SrvConf = (); 
    type LocConf = ModuleConfig; 

    unsafe extern "C" fn postconfiguration(cf: *mut ngx_conf_t) -> ngx_int_t { 
        let htcf = http::ngx_http_conf_get_module_main_conf(cf, &ngx_http_core_module); 

        let h = ngx_array_push( 
            &mut (*htcf).phases[ngx_http_phases_NGX_HTTP_ACCESS_PHASE as usize].handlers, 
        ) as *mut ngx_http_handler_pt; 
        if h.is_null() { 
            return core::Status::NGX_ERROR.into(); 
        } 

        // set an Access phase handler 
        *h = Some(howto_access_handler); 
        core::Status::NGX_OK.into() 
    } 
} 

Daha fazla örnek kod ve uygulamaları şu adreste bulabilirsiniz: ngx-pas-nasıl yapılır depo

NGINX, ngx-rust projesinin tanıtılmasıyla birlikte Rust programlama dilini benimsiyor ve geliştiricilere NGINX modüllerini yazmanın yeni bir yolunu sunuyor. Bu girişim, NGINX’in yeteneklerini geliştirmeyi ve geliştiricilere web sunucusuyla çalışmanın daha güvenli ve daha ergonomik bir yolunu sunmayı amaçlıyor. Ayrıca Cloudflare, bildirildiği gibi NGINX modülü uygulaması için Rust’u kullanmaya başladı. Bu ayrıntılı blog yazısı.

Source link

Yorum yapın